ChatGPT解决这个技术问题 Extra ChatGPT

在 Go 中获取当前时间作为格式化字符串?

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

这就是您所需要的golangprograms.com/…

D
Dave C

使用 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' ?
B
Bactisme

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

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


我同意;问题的标题应为“当前日期”而不是“当前时间戳”
虽然已经晚了,但我认为 .Unix() 应该指向返回类型为 int64 的 golang.org/pkg/time/#Time.Unix
虽然您在技术上是正确的,但我认为这些天很多编码人员将时间戳与“以某种格式化方式的当前时间”混为一谈,因此该标题对大多数人来说同样令人困惑。
我建议进行修改 - Get current time as formatted string in Go?。希望有人会批准。
m
matthewmcneely

为了可读性,最好使用 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
D
Deleplace

使用 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()
M
Maëlan

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

这是您会发现的不同格式的体验:

package main

import (
    "fmt"
    "time"
)

func main() {
    currentTime := time.Now()
    fmt.Println("Current Time in String: ", currentTime.String())
    fmt.Println("MM-DD-YYYY : ", currentTime.Format("01-02-2006"))
    fmt.Println("YYYY-MM-DD : ", currentTime.Format("2006-01-02"))
    fmt.Println("YYYY.MM.DD : ", currentTime.Format("2006.01.02 15:04:05"))
    fmt.Println("YYYY#MM#DD {Special Character} : ", currentTime.Format("2006#01#02"))
    fmt.Println("YYYY-MM-DD hh:mm:ss : ", currentTime.Format("2006-01-02 15:04:05"))
    fmt.Println("Time with MicroSeconds: ", currentTime.Format("2006-01-02 15:04:05.000000"))
    fmt.Println("Time with NanoSeconds: ", currentTime.Format("2006-01-02 15:04:05.000000000"))
    fmt.Println("ShortNum Month : ", currentTime.Format("2006-1-02"))
    fmt.Println("LongMonth : ", currentTime.Format("2006-January-02"))
    fmt.Println("ShortMonth : ", currentTime.Format("2006-Jan-02"))
    fmt.Println("ShortYear : ", currentTime.Format("06-Jan-02"))
    fmt.Println("LongWeekDay : ", currentTime.Format("2006-01-02 15:04:05 Monday"))
    fmt.Println("ShortWeek Day : ", currentTime.Format("2006-01-02 Mon"))
    fmt.Println("ShortDay : ", currentTime.Format("Mon 2006-01-2"))
    fmt.Println("Short Hour Minute Second: ", currentTime.Format("2006-01-02 3:4:5"))
    fmt.Println("Short Hour Minute Second: ", currentTime.Format("2006-01-02 3:4:5 PM"))
    fmt.Println("Short Hour Minute Second: ", currentTime.Format("2006-01-02 3:4:5 pm"))
}

输出是:

Current Time in String:  2017-07-04 00:47:20.1424751 +0530 IST
MM-DD-YYYY :  07-04-2017
YYYY-MM-DD :  2017-07-04
YYYY.MM.DD :  2017.07.04 00:47:20
YYYY#MM#DD {Special Character} :  2017#07#04
YYYY-MM-DD hh:mm:ss :  2017-07-04 00:47:20
Time with MicroSeconds:  2017-07-04 00:47:20.142475
Time with NanoSeconds:  2017-07-04 00:47:20.142475100
ShortNum Month :  2017-7-04
LongMonth :  2017-July-04
ShortMonth :  2017-Jul-04
ShortYear :  17-Jul-04
LongWeekDay :  2017-07-04 00:47:20 Tuesday
ShortWeek Day :  2017-07-04 Tue
ShortDay :  Tue 2017-07-4
Short Hour Minute Second:  2017-07-04 12:47:20
Short Hour Minute Second:  2017-07-04 12:47:20 AM
Short Hour Minute Second:  2017-07-04 12:47:20 am

请将代码发布为代码,而不是图片。
S
STEEL

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


J
Jack Ryan

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

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

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


time.Now().UnixMilli()
p
pallabi

您可以简单地使用 strconv.Itoa(int(time.Now().Unix()))


s
suran

要回答确切的问题:

import "github.com/golang/protobuf/ptypes"

Timestamp, _ = ptypes.TimestampProto(time.Now())

谢谢Suran,当需要通过grpc发送时间戳时,这很有用