go - 检查 time.now 是否在一天中的两次之间
问题描述
我有一个时间对象,它将使用以下内容动态生成:
timeNow := time.Now()
我需要检查现在的时间是否在给定的开始和结束时间之内。
所以我会有两个这样的字符串:
startTime := "8:00 AM"
endTime := "10:00 PM"
然后我会以某种方式将这些字符串转换为时间对象,并检查时间内置的 .before() 和 .after() 函数。
问题是,我不确定如何使用今天的日期(从 time.now 开始)创建时间对象,但从给定时间开始,即像“8:00 AM”这样的字符串,这怎么可能?谢谢
解决方案
AS @Volker 建议(在评论中)如果您可以将小时作为整数进行比较,timeNow.Hour()
那么这是一个好方法。如果你必须处理一个字符串(例如来自配置文件),那么你可以做这样的事情(操场)
startTime := "8:00 AM"
endTime := "10:00 PM"
now := time.Now()
// Parse the start/end times
sTimeOnly, err := time.Parse("3:04 PM", startTime)
if err != nil {
panic(err)
}
eTimeOnly, err := time.Parse("3:04 PM", endTime)
if err != nil {
panic(err)
}
// Add current date to the times
s := time.Date(now.Year(), now.Month(), now.Day(), sTimeOnly.Hour(), sTimeOnly.Minute(), sTimeOnly.Second(), sTimeOnly.Nanosecond(), now.Location())
e := time.Date(now.Year(), now.Month(), now.Day(), eTimeOnly.Hour(), eTimeOnly.Minute(), eTimeOnly.Second(), eTimeOnly.Nanosecond(), now.Location())
if now.Before(s) || now.After(e) {
fmt.Println("Outside of time range")
} else {
fmt.Println("Within time range")
}
注意: time.Now() 返回当前本地时间(即您的机器配置为使用的任何时区的时间)。这很重要,因为如果运行应用程序的机器未配置为在正确的时区运行,那么结果将不会如您预期的那样。
推荐阅读
- vue.js - 更改页面时禁用过渡
- angular - 具有 ngx-translate 依赖项的 Angular 6 单元测试
- profiling - Class::DBI - 它会加载所有表吗?
- delphi - FireDAC“无法完成对主机的网络请求”
- wxwidgets - wx.Grid 和 ScrolledWindows
- javascript - 如何使用 react-swipe-card 在 React 中构建可堆叠的卡片?
- python - Python 'dict' 对象没有属性 'status'
- node.js - 在 NodeJS 中获取和发布文本
- sql - 如何根据sql中组内的条件查找行?
- sql - 如何从续集迁移中获取原始 SQL