参考:
我想弄清楚时间包中使用的“Handy Time Stamp”是什么。
我可以使用其他常量(如RFC
)解析日期t, _ := time.Parse(time.RFC822, "02 Jan 06 15:04 MST")
fmt.Println(t.Unix())
Output 1136214240
vs
t, _ := time.Parse(time.Stamp, "Jan _2 15:04:05")
fmt.Println(t.Unix())
Output: -62135596800
最后一个输出是错误的。我在这里错过了什么?这些时间戳有用吗?
下面是时间常数的Godoc:
const (
ANSIC = "Mon Jan _2 15:04:05 2006"
UnixDate = "Mon Jan _2 15:04:05 MST 2006"
RubyDate = "Mon Jan 02 15:04:05 -0700 2006"
RFC822 = "02 Jan 06 15:04 MST"
RFC822Z = "02 Jan 06 15:04 -0700" // RFC822 with numeric zone
RFC850 = "Monday, 02-Jan-06 15:04:05 MST"
RFC1123 = "Mon, 02 Jan 2006 15:04:05 MST"
RFC1123Z = "Mon, 02 Jan 2006 15:04:05 -0700" // RFC1123 with numeric zone
RFC3339 = "2006-01-02T15:04:05Z07:00"
RFC3339Nano = "2006-01-02T15:04:05.999999999Z07:00"
Kitchen = "3:04PM"
// Handy time stamps.
Stamp = "Jan _2 15:04:05"
StampMilli = "Jan _2 15:04:05.000"
StampMicro = "Jan _2 15:04:05.000000"
StampNano = "Jan _2 15:04:05.000000000"
)
答案 0 :(得分:6)
最后一个输出是错误的。我在这里错过了什么?这些时间戳有用吗?
你肯定错过了这里的错误检查,让我们添加它
t, err := time.Parse(time.Stamp, "Jan _2 15:04:05")
fmt.Println(err)
fmt.Println(t.Unix())
输出:
解析时间“Jan _2 15:04:05”为“Jan _2 15:04:05”:无法解析“_2 15:04:05“as”_2“ -62135596800
正确的字符串将是“1月2日15:04:05”(注意1月和2月之间的双倍空格)。关于文档的下划线:
在格式字符串中,下划线_表示可能的空格 如果以下数字(一天)有两位数,则用数字代替; 与固定宽度的Unix时间格式兼容。
然后,为什么它作为UNIX时间的表示是否定的,让我们检查一下:
t, err := time.Parse(time.Stamp, "Jan 2 15:04:05")
fmt.Println(err)
fmt.Println(t)
输出:
<nil>
0000-01-02 15:04:05 +0000 UTC
所以它是负面的,因为年份是0000。
最后,它有用吗?例如,要测量耗时操作的持续时间。您可以输出以Stamp格式之一记录当前时间以及一些消息,例如“开始执行此操作”,“完成此操作”。然后,因为它是固定宽度格式并且没有不必要的年份信息 - 它很容易阅读日志,很容易解析这些日志。
此格式实际上用于* nix中的“syslog”。