Date 检查Go中的两个时间对象是否在同一日期

Date 检查Go中的两个时间对象是否在同一日期,date,time,go,Date,Time,Go,比较两个time.time对象以查看它们是否在同一日历日的最佳方法是什么 我研究了如何使用t.Truncate(),但它只能截短到几个小时。我知道我可以使用t.GetDate(),这很简单,但仍然需要比我认为需要的更多的代码行。通过对年、月和日分别调用方法,三次解析日期组件的时间是低效的。对所有三个日期组件使用一个方法调用。从我的基准测试来看,它几乎快了三倍。比如说, if a.Day() == b.Day() && a.Month() == b.Month() &&am

比较两个
time.time
对象以查看它们是否在同一日历日的最佳方法是什么


我研究了如何使用
t.Truncate()
,但它只能截短到几个小时。我知道我可以使用
t.GetDate()
,这很简单,但仍然需要比我认为需要的更多的代码行。

通过对年、月和日分别调用方法,三次解析日期组件的时间是低效的。对所有三个日期组件使用一个方法调用。从我的基准测试来看,它几乎快了三倍。比如说,

if a.Day() == b.Day() && a.Month() == b.Month() && a.Year() == b.Year() {
    // same date
}
import "time"

func DateEqual(date1, date2 time.Time) bool {
    y1, m1, d1 := date1.Date()
    y2, m2, d2 := date2.Date()
    return y1 == y2 && m1 == m2 && d1 == d2
}

您也可以使用以下命令将其截断为天:

t.Truncate(time.Hour * 24)

难道你不能将
24*time.Hour
传递到
Truncate
?是的,但前提是你使用的时区没有夏令时。一天并不总是24小时。一天几乎从来都不是24小时。两个时间在同一时区吗?如果不是,您需要注意“在同一日历日”的含义。在本例中,它们是相同的时区,但这是一个好的观点。显然,只在UCT时间有效,因为它在Truncate()文档中声明,计算是“从零时间开始”执行的,在时间类型文档中,它是“时间类型的零值为1年1月1日00:00:00.000000000 UTC。”根据