Go “的目的是什么?”;方便时间邮票;在时间包里?
参考: 我试图弄清楚时间包中的“方便时间戳”是用来做什么的 我可以使用其他常量(如RFC)解析日期Go “的目的是什么?”;方便时间邮票;在时间包里?,go,Go,参考: 我试图弄清楚时间包中的“方便时间戳”是用来做什么的 我可以使用其他常量(如RFC)解析日期 t, _ := time.Parse(time.RFC822, "02 Jan 06 15:04 MST") fmt.Println(t.Unix()) vs 最后的输出是错误的。我错过了什么?这些时间戳如何有用 以下是时间常数的Godoc: const ( ANSIC = "Mon Jan _2 15:04:05 2006" UnixDate
t, _ := time.Parse(time.RFC822, "02 Jan 06 15:04 MST")
fmt.Println(t.Unix())
vs
最后的输出是错误的。我错过了什么?这些时间戳如何有用
以下是时间常数的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"
)
最后的输出是错误的。我错过了什么?这些时间戳如何有用
您肯定错过了一个错误检查,让我们添加它
t, err := time.Parse(time.Stamp, "Jan _2 15:04:05")
fmt.Println(err)
fmt.Println(t.Unix())
输出:
<nil>
0000-01-02 15:04:05 +0000 UTC
解析时间“Jan\u 2 15:04:05”为“Jan\u 2 15:04:05”:无法解析“\u 2”
15:04:05“as”\u 2
-62135596800
正确的字符串应该是“Jan2 15:04:05”(注意Jan和2之间的双空格)。关于文档中的下划线:
在格式字符串中,下划线u表示一个可能
如果以下数字(一天)有两位数,则替换为一位数;
与固定宽度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-01-02 15:04:05+0000 UTC
所以它是负数,因为年份是0000
最后,它在哪里有用?例如,测量耗时操作的持续时间。您可以将当前时间以一种戳记格式输出到日志,并显示一些消息,如“开始执行此操作”、“完成执行此操作”。然后,因为它是固定宽度格式,并且没有不必要的年份信息,所以很容易读取日志,很容易解析这些日志
这种格式实际上在*nix中的“syslog”中使用
最后的输出是错误的。我错过了什么?这些时间戳如何有用
您肯定错过了一个错误检查,让我们添加它
t, err := time.Parse(time.Stamp, "Jan _2 15:04:05")
fmt.Println(err)
fmt.Println(t.Unix())
输出:
<nil>
0000-01-02 15:04:05 +0000 UTC
解析时间“Jan\u 2 15:04:05”为“Jan\u 2 15:04:05”:无法解析“\u 2”
15:04:05“as”\u 2
-62135596800
正确的字符串应该是“Jan2 15:04:05”(注意Jan和2之间的双空格)。关于文档中的下划线:
在格式字符串中,下划线u表示一个可能
如果以下数字(一天)有两位数,则替换为一位数;
与固定宽度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-01-02 15:04:05+0000 UTC
所以它是负数,因为年份是0000
最后,它在哪里有用?例如,测量耗时操作的持续时间。您可以将当前时间以一种戳记格式输出到日志,并显示一些消息,如“开始执行此操作”、“完成执行此操作”。然后,因为它是固定宽度格式,并且没有不必要的年份信息,所以很容易读取日志,很容易解析这些日志
这种格式实际上在*nix中的“syslog”中使用。这两个日期不同;您传递给RFC822的是2006年的MST。
Stamp
one没有指定年份或时区,因此它可能会选择今年和您的时区。@nmichaels如果是今年和我的时区,那么输出不是正数吗?如果我知道问题的答案,我会回答它。我不知道为什么它是负面的,但不管它有什么问题,这些日期是不一样的;您传递给RFC822的是2006年的MST。Stamp
one没有指定年份或时区,因此它可能会选择今年和您的时区。@nmichaels如果是今年和我的时区,那么输出不是正数吗?如果我知道问题的答案,我会回答它。我不知道为什么它是负面的,但不管它有什么问题,这些日期都不一样。下面是一个游乐场示例: