当前位置: 首页 > 面试题库 >

如何从第二天开始指定时间

柳修为
2023-03-14
问题内容

我想为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

题:

有没有编写此代码的较短方法?


问题答案:

包装时间

import "time"

月,日,小时,分钟,秒和nsec值可能超出其通常范围,并将在转换过程中进行归一化。例如,10月32日转换为11月1日。

这样更有效。它最大程度地减少了对包time函数和方法的html" target="_blank">调用。

package main

import (
    "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 EDT
2019-06-22 15:00:00 -0400 EDT

一些基准:

BenchmarkNow-8                  31197811            36.6 ns/op
BenchmarkTomorrowPeterSO-8      29852671            38.4 ns/op
BenchmarkTomorrowJens-8          9523422           124 ns/op

bench_test.go

package main

import (
    "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
    }
}


 类似资料:
  • 我如何暂停我的石英触发器,并在第二天在其指定的开始时间开始它?为(如)。我的cron表达式是*0/20 15-00**?所以当我暂停扳机时,它应该在第二天15:00开始。

  • Shell 编程就像一个 1950 年代的自动点唱机… -- Larry Wall 在最简单的情况下,脚本程序不过是存储在一个文件里的系统命令列表。这至少让你执行它时不必重新按顺序键入相同功能的命令序列。 例子 2-1. cleanup: 一个清空/var/log目录下的日志文件的脚本 1 # Cleanup 2 # 必须以root用户运行. 3 4 cd /var/log

  • 也许我想多了。我想每周一上午9点发送本地通知,直到满足某些条件。我知道这可以通过设置的和组件来完成。我遇到的问题是我将传递给的值取决于正在使用的。如果我理解正确,则取决于用户的设置。例如,如果用户的日历周从周日开始,我会传递1到,但如果一周从周六开始,我会传递2。 我的问题是,我该如何解释时区、夏令时和周开始日之类的事情?

  • 我有两个IP的主节点和工作节点?我需要使用这些部署一些服务。我对kubernetes一无所知,什么是主节点和工作节点? 我该如何开始?

  • 问题内容: 我有含有天自变量历元基准日期的用于某一日期。 有人知道将该变量转换为a的方法吗? 问题答案: 以下应该工作: 关于时区的注释: 使用程序运行所在系统的默认时区创建一个新实例。由于Epoch是相对于UTC(Java中的GMT)的,因此必须谨慎处理与UTC不同的任何时区。以下程序说明了该问题: 此打印 这表明仅使用eg是不够的。在这种情况下,必须始终考虑到一天中的什么时间。这可以通过显式使

  • 当我开始我的页面时,一切都加载正常,我第二次尝试重新加载,我收到以下错误,我从角度运行网址 在上一个异步操作完成之前,在此上下文上启动了第二个操作。使用“await”确保在该上下文上调用另一个方法之前已完成任何异步操作。任何实例成员都不能保证线程安全。 这就是方法 在这个类中,调用将成为数据库的上下文 这种情况不仅发生在这个方法中,当我尝试调用多个时也会发生