【发布时间】:2021-09-05 21:43:52
【问题描述】:
我想知道在 Golang 中是否有任何现有的包来处理没有日期的日期时间。
问题如下。想象一下,我想存储有关公司班次的信息,包括班次的开始和结束时间,我会创建如下内容:
import "time"
type Shift struct {
StartTime time.Time
FinishTime time.Time
// More fields
}
问题是,time.Time 字段还存储有关日、月和年的信息,这可能会导致在比较班次时出现一些问题。
有没有像 Civil.Date (https://pkg.go.dev/cloud.google.com/go/civil) 这样的替代方案,但只是时间而不是日期?
【问题讨论】:
-
time.Time有时间和日期。如果您使用time.Time并且“忽略”日期部分,那么剩下的就是时间。使用相同的日期部分,这样问题就消失了(只要确保它不是夏令时)。 -
A time.Time 是时间的一个实例。看来您想处理“时钟读数”,它不是 时间实例,而只是一个字符串。那么为什么不使用字符串呢?如果您有兴趣使用“下午 2:30”。
-
是的,但关键是,如果您允许用户给出日期,那么 time.Time 在小于/大于比较中很容易出现错误。目标应该是有一个可比较的结构,并且用户不要给出日期以免弄乱它。
-
如果您获得“挂钟”时间作为用户的输入,您可以将其转换为
time.Duration,其中 0 表示任何一天的 00:00:00.000(因为您忽略反正天)。然后,您可以轻松比较这些持续时间。 -
不过,比较挂钟时间并不明显。 23:00 是 01:00 前两小时还是 22 小时后?午夜和中午呢?这是一些你必须在你的上下文中决定的。我怀疑是否存在在所有情况下都可以完全满足您的需求的软件包。不过,自己实现它应该很简单。