【问题标题】:Get current time as formatted string in Go?在 Go 中获取当前时间作为格式化字符串?
【发布时间】:2011-08-18 15:13:06
【问题描述】:

在 Go 中获取当前时间戳并转换为字符串的最佳方法是什么?我需要日期和时间,例如。 YYYYMMDDhhmmss 格式。

【问题讨论】:

标签: timestamp go


【解决方案1】:

使用time.Now() 函数和time.Format() 方法。

t := time.Now()
fmt.Println(t.Format("20060102150405"))

打印出20110504111515,或者至少在几分钟前打印出来。 (我在东部夏令时间。)在时间包中定义的constants 中有几种预定义的时间格式。

如果您希望使用 UTC 而不是本地时区,则可以使用 time.Now().UTC()

【讨论】:

  • 我绝对喜欢 Kitchen 常量 (= "3:04PM")
  • 感谢您提供的信息。时间包如何通过传递“20060102150405”知道我们正在传递的内容,因为它不是时间包中的预定义常量之一?时间包(20060102150405)中那个日期和时间的意义是什么?对我来说这似乎有点古怪,但只要它有效,我想只要我们在编码时不出错就没有关系。我猜他们认为不适合为该格式提供常量并匹配字符串模式。
  • @brianoh: 见golang.org/pkg/time/#Constants 这是时间“01/02 03:04:05PM '06 -0700” 因为每个组件都有不同的编号(1、2、3 等) ,它可以从数字中确定你想要什么组件。
  • 请注意 time.LocalTime() 不再存在:请参阅下面的答案以兼容 Go 1.0.3
  • 很奇怪,我要记住一个比我妻子生日少得多的数字!你认为GO常数比你家人的生日重要吗?为什么不只是'%Y-%m-%d %H:%M:%S'?
【解决方案2】:

使用 time.Now()time.Format() 函数(因为 time.LocalTime() 从 Go 1.0.3 开始不再存在)

t := time.Now()
fmt.Println(t.Format("20060102150405"))

Online demo(操场上的日期固定在过去,没关系)

【讨论】:

  • 您可以像这样简单地将其用作字符串:s := "Actual time is: "+time.Now().String()
【解决方案3】:

为了可读性,最好使用 time 包中的 RFC 常量(我认为)

import "fmt" 
import "time"

func main() {
    fmt.Println(time.Now().Format(time.RFC850))
}

【讨论】:

  • 这是如何产生 YYYYMMDDhhmmss 的?
  • RFC850 产生 Tuesday, 10-Nov-09 23:00:00 UTC RFC3339 = "2006-01-02T15:04:05Z07:00" play.golang.org/p/XmobwWSz5pN golang.org/pkg/time
  • 我个人更喜欢:time.Now().Format(time.RFC3339),样本输出:2021-08-19T13:52:51+03:00
【解决方案4】:

对于来自 google 并正在寻找“timestamp in go”的人来说,所有其他响应都是非常错误的! YYYYMMDDhhmmss 不是“时间戳”。

要在 go 中获取日期的“时间戳”(从 1970 年 1 月开始的秒数),正确的函数是 .Unix(),它确实返回一个整数

【讨论】:

  • 我同意;问题的标题应为“当前日期”而不是“当前时间戳”
  • 虽然已经晚了,但我认为 .Unix() 应该指向返回类型为 int64 的golang.org/pkg/time/#Time.Unix
  • 虽然您在技术上是正确的,但我认为现在很多编码人员将时间戳与“以某种格式格式化的当前时间”混为一谈,所以这个标题同样会让大多数人感到困惑。跨度>
  • 我建议编辑 - Get current time as formatted string in Go?。希望有人会批准它。
【解决方案5】:

作为对@Bactisme 响应的回应,检索当前时间戳(例如以毫秒为单位)的方式是:

msec := time.Now().UnixNano() / 1000000

资源:https://gobyexample.com/epoch

【讨论】:

    【解决方案6】:

    要回答确切的问题:

    import "github.com/golang/protobuf/ptypes"
    
    Timestamp, _ = ptypes.TimestampProto(time.Now())
    

    【讨论】:

    • 感谢 Suran,这在需要通过 grpc 发送时间戳时很有用
    【解决方案7】:

    在这篇文章中找到更多信息:Get current date and time in various format in golang

    这是您将在上一篇文章中找到的不同格式的体验:

    【讨论】:

      【解决方案8】:

      https://golang.org/src/time/format.go 指定 对于解析时间,15 用于小时,04 用于分钟,05 用于秒。

      对于解析日期,11JanJanuary 是月份,02MonMonday 是月份中的某天,2006 是年份,当然MST 是区域

      但是你也可以使用这个布局,我觉得这很简单。 "Mon Jan 2 15:04:05 MST 2006"

          const layout = "Mon Jan 2 15:04:05 MST 2006"
          userTimeString := "Fri Dec 6 13:05:05 CET 2019"
      
          t, _ := time.Parse(layout, userTimeString)
          fmt.Println("Server: ", t.Format(time.RFC850))
          //Server:  Friday, 06-Dec-19 13:05:05 CET
      
          mumbai, _ := time.LoadLocation("Asia/Kolkata")
          mumbaiTime := t.In(mumbai)
          fmt.Println("Mumbai: ", mumbaiTime.Format(time.RFC850))
          //Mumbai:  Friday, 06-Dec-19 18:35:05 IST
      
      

      DEMO

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-05-28
        • 2017-08-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多