What is the significance of Go's time.Format(layout string) reference time?

huangapple go评论83阅读模式
英文:

What is the significance of Go's time.Format(layout string) reference time?

问题

Go语言中的time.Format(layout string)函数中的参考时间是具有特殊意义的,它的值为Mon Jan 2 15:04:05 -0700 MST 2006

这个特定的时间并不是完全随机选择的,它有着特殊的含义。

在Go语言中,这个参考时间被称为Unix时间戳的起始时间,它是计算机科学中的一个标准时间表示方式。这个时间被选为参考时间是为了方便程序员在使用time包进行时间格式化和解析时的操作。

通过使用这个参考时间,程序员可以根据自己的需求定义不同的时间格式,将时间按照指定的格式进行显示或解析。这种设计可以使时间格式化的操作更加直观和易于理解。

总之,Go语言中的time.Format函数中的参考时间是为了方便程序员进行时间格式化和解析操作而选择的一个特定时间点。

英文:

What is the significance of Go's time.Format(layout string) reference time, ie:

Mon Jan 2 15:04:05 -0700 MST 2006

This specific time couldn't have been chosen completely randomly, right?

Source: http://golang.org/pkg/time/#Time.Format

答案1

得分: 21

每个日期部分都被用作索引:

Jan        -> 1      -> 月份
2          -> 2      -> 日期
15 = 3PM   -> 15/3   -> 小时
04         -> 4      -> 分钟
05         -> 5      -> 秒
2006       -> 6      -> 年份
-0700      -> 7      -> 时区

根据文档的说明:

由于MST是GMT-0700,可以将参考时间视为01/02 03:04:05PM '06 -0700

这使得time.Format方法能够解析可视上与所需结果完全相同的人类可读日期格式规范。

与使用难以记忆的格式字符串(例如"%a, %d %b %y %T %z")表示RFC 822兼容日期格式的strftime C函数相比,这种方式更容易理解。

Go语言的等效格式是:"Mon, 02 Jan 06 15:04 MST"

time.Format将对此字符串进行分词并分析每个单词。

  • Mon被直接识别为星期一,因此这是星期几的名称
  • 逗号保持不变
  • 02被识别为整数值2,表示日期
  • Jan是一月的英文缩写,因此用于月份部分
  • 06是6,因此是年份部分
  • 15等同于3,表示小时
  • ':'字符保持不变
  • 04是4,因此是分钟
  • MST被直接解释

请参阅https://github.com/golang/go/blob/go1.15/src/time/format.go#L151,了解确切的算法。

英文:

Each part of the date is used as an index:

Jan        -> 1      -> Month
2          -> 2      -> Day-of-Month
15 = 3PM   -> 15/3   -> hour
04         -> 4      -> minute
05         -> 5      -> second
2006       -> 6      -> year
-0700      -> 7      -> time-zone

So according to the doc:

> Since MST is GMT-0700, the reference time can be thought of as
> 01/02 03:04:05PM '06 -0700

This makes it easy for the time.Format method to parse human-readable date format specifications that are visually identical to the desired result.

Compare this to for example the strftime C function that uses hard-to-remember format strings such as "%a, %d %b %y %T %z" which represents a RFC 822-compliant date format.

The Go equivalent is: "Mon, 02 Jan 06 15:04 MST".

The time.Format will tokenize this string and analyze each word.

  • Mon is recognized litteraly as monday so this is the week day's name
  • the comma is left untouched
  • 02 is recognized as the integer value 2, representing a day-of-month in the index
  • Jan is the known english abbreviation for the january month, so this is used for the month part
  • 06 is 6 so this the year part
  • 15 is equivalent to 3 and represent the hour
  • the ':' character is left untouched
  • 04 is 4, therefore the minute
  • MST is interpreted litteraly

See https://github.com/golang/go/blob/go1.15/src/time/format.go#L151 for the exact algorithm.

答案2

得分: 4

在美国的日期格式中,它是 Mon, 1/2 03:04:05 PM 2006 -0700

1, 2, 3, 4, 5, 6, 7.

英文:

In American date format, it's Mon, 1/2 03:04:05 PM 2006 -0700.

1, 2, 3, 4, 5, 6, 7.

huangapple
  • 本文由 发表于 2015年1月22日 19:18:54
  • 转载请务必保留本文链接:https://go.coder-hub.com/28087471.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定