如何获取第二天的具体时间

time.Time我想为第二天(明天)的确切时间点创建一个。现在我想设置小时和分钟。

这是我目前使用的代码:

now := time.Now()
tomorrow := time.Date(now.Year(), now.Month(), now.Day(), 15, 0, 0, 0, time.UTC).AddDate(0,0,1)

这将为今天创建一个Date具有我正在寻找的确切时间(小时和分钟)的日期,然后添加一天Date。这很好用。


例子:

想象一下time.Now()2009-11-10 23:00:00 +0000 UTC

以下代码的结果将是:2009-11-10 15:00:00 +0000 UTC

tomorrow := time.Date(now.Year(), now.Month(), now.Day(), 15, 0, 0, 0, time.UTC)

到目前为止,我添加了一天使用AddDate(0, 0, 1). 结果就是第二天所需的时间:2009-11-11 15:00:00 +0000 UTC

请参阅: https: //play.golang.org/p/OKR9V1HN50x


问题:

有没有更短的方法来编写这段代码?


桃花长相依
浏览 118回答 1
1回答

杨__羊羊

打包时间import "time"月、日、小时、分钟、秒和纳秒值可能超出其通常范围,并将在转换过程中标准化。例如,10 月 32 日转换为 11 月 1 日。这样效率更高。它最大限度地减少了对包time函数和方法的调用。package mainimport (    "fmt"    "time")func main() {    now := time.Now()    fmt.Println(now.Round(0))    yyyy, mm, dd := now.Date()    tomorrow := time.Date(yyyy, mm, dd+1, 15, 0, 0, 0, now.Location())    fmt.Println(tomorrow)}输出:2019-06-21 16:23:06.525478162 -0400 EDT2019-06-22 15:00:00 -0400 EDT一些基准:BenchmarkNow-8                  31197811            36.6 ns/opBenchmarkTomorrowPeterSO-8      29852671            38.4 ns/opBenchmarkTomorrowJens-8          9523422           124 ns/opbench_test.go:package mainimport (    "testing"    "time")func BenchmarkNow(b *testing.B) {    for N := 0; N < b.N; N++ {        now := time.Now()        _ = now    }}var now = time.Now()func BenchmarkTomorrowPeterSO(b *testing.B) {    for N := 0; N < b.N; N++ {        // now := time.Now()        yyyy, mm, dd := now.Date()        tomorrow := time.Date(yyyy, mm, dd+1, 15, 0, 0, 0, now.Location())        _ = tomorrow    }}func BenchmarkTomorrowJens(b *testing.B) {    for N := 0; N < b.N; N++ {        // now := time.Now()        tomorrow := time.Date(now.Year(), now.Month(), now.Day(), 15, 0, 0, 0, now.Location()).AddDate(0, 0, 1)        _ = tomorrow    }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go