如何将当前时间格式化为YYYY-MM-DDTHH:MM:SSZ

时间:2019-02-03 01:38:59

标签: go datetime-format

以前从未尝试过Go,目前正在做一个小项目。任务之一是获取当前系统时间并以YYYY-MM-DDT00:00:00Z格式表示。我相信Z表示时间是以UTC格式表示的,但是当我查看db时,所有时间戳都是这样的,即2011-11-22T15:22:10Z

那么我该如何在Go中格式化?

更新 我可以使用以下代码对其进行格式化

t := time.Now()
fmt.Println(t.Format("2006-01-02T15:04:05Z"))

现在问题仍然存在,Z在这里表示什么。我应该获得UTC时间吗?

另一个问题,看来我用来格式化的值会影响输出,即当我使用2019-01-02T15:04:05Z时,输出变成2029-02-02T20:45:11Z,为什么?

2 个答案:

答案 0 :(得分:1)

转到提供了非常灵活的方式来解析通过示例的时间。为此,必须以您选择的格式编写“参考”时间。参考时间为Mon Jan 2 15:04:05 MST 2006。就我而言,我使用这个参考时间来解析Now()

fmt.Println(time.Now().UTC().Format("2006-01-02T15:04:05Z"))

答案 1 :(得分:1)

“如果时间以世界标准时间(UTC)为准,则在该时间之后立即添加“ Z”,而无需分隔空格。“ Z”是UTC偏移为零的区域标记。“ 09:30 UTC”因此,“ 14:45:15 UTC”表示为“ 14:45:15Z”或“ 144515Z”。[16]”

来自https://en.wikipedia.org/wiki/Time_zone#UTC

// Some valid layouts are invalid time values for time.Parse, due to formats
// such as _ for space padding and Z for zone information.

// Replacing the sign in the format with a Z triggers
// the ISO 8601 behavior of printing Z instead of an
// offset for the UTC zone. Thus:
//  Z0700  Z or ±hhmm
//  Z07:00 Z or ±hh:mm
//  Z07    Z or ±hh

来自软件包time/format.go的来源