为了账号安全,请及时绑定邮箱和手机立即绑定

如何获得一天中的秒数

如何获得一天中的秒数

Go
梵蒂冈之花 2023-06-12 16:32:58
如何在 Go 中获取一天中的秒数 (1 - 86400)?更新/澄清想要相当于 golang 中的 joda/SecondOfDay预计在一天结束时从 0 和 86400 开始在 golang 中重写一个 java 开源函数时需要,该函数又使用 joda/secondOfDay用谷歌搜索“24 小时到秒”得到 86400在提问时我只能想到 now.Unix()-yesterdayMidnight.Unix() 而我并没有想到简单接受的答案显然没有考虑夏令时想看看是否有一些内置函数或流行/标准库
查看完整描述

2 回答

?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

如果我们将“一天中的秒数”定义为“自午夜以来经过的秒数”,那么即使在夏令时发生的日子里,为了获得正确的结果,我们也应该从给定时间中减去代表午夜的时间。为此,我们可以使用Time.Sub().

func daySeconds(t time.Time) int {

    year, month, day := t.Date()

    t2 := time.Date(year, month, day, 0, 0, 0, 0, t.Location())

    return int(t.Sub(t2).Seconds())

}

测试它:


for _, t := range []time.Time{

    time.Date(2019, 1, 1, 0, 0, 30, 0, time.UTC),

    time.Date(2019, 1, 1, 0, 1, 30, 0, time.UTC),

    time.Date(2019, 1, 1, 0, 12, 30, 0, time.UTC),

    time.Date(2019, 1, 1, 12, 12, 30, 0, time.UTC),

} {

    fmt.Println(daySeconds(t))

}

输出(在Go Playground上尝试):


30

90

750

43950

让我们看看这个函数如何在夏令时发生时给出正确的结果。在匈牙利,2018 年 3 月 25 日是时钟02:00:00从2 am转到1 小时的一天3 am。


loc, err := time.LoadLocation("CET")

if err != nil {

    fmt.Println(err)

    return

}


t := time.Date(2018, 3, 25, 0, 0, 30, 0, loc)

fmt.Println(t)

fmt.Println(daySeconds(t))


t = t.Add(2 * time.Hour)

fmt.Println(t)

fmt.Println(daySeconds(t))

此输出(在Go Playground上尝试):


2018-03-25 00:00:30 +0100 CET

30

2018-03-25 03:00:30 +0200 CEST

7230

我们打印daySeconds午夜后 30 秒的时间,这是30当然的。然后我们将时间加上 2 小时(2 小时 = 2*3600 秒 = 7200),这个daySeconds新时间的时间将是正确的7200 + 30 = 7230,即使时间更改为 3 小时。


查看完整回答
反对 回复 2023-06-12
?
神不在的星期二

TA贡献1963条经验 获得超6个赞

注意: 此函数返回 (0 - 86399) 范围内一天中的标称秒数。如果您正在寻找“自午夜以来经过的秒数”,由于夏令时可能不在 (0 - 86399) 范围内,请参阅@icza 的回答。

它似乎对应于名义秒数实现(如我在下面的回答中)而不是“数量自午夜以来经过的秒数”(如@icza 的回答)。

package main 


import (

    "fmt"

    "time"

)


func getSecondOfDay(t time.Time) int {

    return 60*60*t.Hour() + 60*t.Minute() + t.Second()

}


func main() {

    t := time.Now()

    fmt.Println(getSecondOfDay(t))

}


查看完整回答
反对 回复 2023-06-12
  • 2 回答
  • 0 关注
  • 217 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信