模块 time:时间操作
time 模块提供了时间日期的有关操作,主要为 time.Datetime 与 time.Duration
- time.Datetime
- time.Duration
- 预定义变量:NANOSECOND, MICROSECOND, MILLISECOND, SECOND, MINUTE, HOUR, DAY (Duration)
- 内置函数
time.Datetime
提供了日期与时间的相关能力
属性 year, month, day, month, minute, second, nanosecond (int)
返回底层的年月日时分秒和纳秒
属性 timestamp, nanotimestamp (int)
返回 Unix 时间戳
- timetamp 属性返回 int 类型的秒级时间戳
- nanotimestamp 属性为 int 类型的纳秒级时间戳
如需获取毫秒级时间戳可利用 .nanotimestamp // 1E6 获得
如需获取小数的秒级时间戳可利用 .nanotimestamp / 1E9 获得
d = time.datetime(2021, 3, 6, 14, 7, 21)
assert(d.year == 2021)
assert(d.month == 3)
assert(d.day == 6)
assert(d.hour == 14)
assert(d.minute == 7)
assert(d.second == 21)
assert(d.timestamp == 1615010841)
assert(d.nanotimestamp == 1615010841000000000)
d += 123 * time.MILLISECOND + 456 * time.MICROSECOND + 789 * time.NANOSECOND
assert(d.timestamp == 1615010841)
assert(d.nanotimestamp == 1615010841123456789)
assert(d.nanotimestamp // 1E6 == 1615010841123)
assert(d.nanotimestamp / 1E9 > 1615010841)
assert(d.nanotimestamp / 1E9 < 1615010842)
format(format: str) → str
进行格式化,format 为 Go 的 datetime 格式化字符串
6062006代表年101Jan代表月202代表日30315代表时,可增加AMPM代表上午/下午404代表分505代表秒
常见的组合有:
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"
)
比较运算(相等、不等、大于、小于、不大于、不小于)
两个 Datetime 之间支持全部六种比较
数值运算(加减)
Datetime 可以和 Duration 进行加减(Datetime 必须为左操作数、Duration 必须为右操作数),结果依然是 Datetime
两个 Datetime 之间可以进行相减,结果为 Duration
base = time.datetime(2001, 1, 1, 10, 0)
cmp = base + 3 * time.DAY - 2 * time.HOUR + 8 * time.MINUTE
assert(cmp > base)
assert(cmp == time.datetime(2001, 1, 4, 8, 8))
assert(cmp - base == 3 * time.DAY - 2 * time.HOUR + 8 * time.MINUTE)
time.Duration
提供了时长的相关能力
属性 seconds, nanoseconds (int)
均为 int 类型,分别代表了底层有多少秒/纳秒
base = 5 * time.MINUTE + 2 * time.MILLISECOND
assert(base.seconds == 300)
assert(base.seconds == base // time.SECOND)
assert(base.seconds < base / time.SECOND)
assert(base.nanoseconds == base / time.NANOSECOND)
assert(base.nanoseconds == 300002000000)
比较运算(相等、不等、大于、小于、不大于、不小于)
两个 Duration 之间支持全部六种比较
数值运算(取相反数,加减乘除,整除)
Duration 可以取相反数,取反结果依然是 Duration
两个 Duration 之间可以加减,加减结果依然是 Duration
Duration 和 int/float 可以相乘,结果依然是 Duration
Duration(除数)和 int/float(被除数)可以相除,结果依然是 Duration
两个 Duration 之间可以相除,结果是 float
两个 Duration 之间可以相整除,结果是 int
base = 10 * time.SECOND
assert(base == 10 * time.SECOND)
assert(-base == 10 * -time.SECOND)
assert(base * 2 == 20 * time.SECOND)
assert(2 * base == 20 * time.SECOND)
assert(2 * base == 20 * time.SECOND)
assert(base + base == 20 * time.SECOND)
assert(base - 3 * time.SECOND == 7 * time.SECOND)
assert(base - base == 0 * time.SECOND)
assert(base / 2 == 5 * time.SECOND)
assert(base / 3 > 3 * time.SECOND)
assert(base / (3 * time.SECOND) > 3)
assert(base // (3 * time.SECOND) == 3)
预定义变量:NANOSECOND, MICROSECOND, MILLISECOND, SECOND, MINUTE, HOUR, DAY (Duration)
- NANOSECOND 纳秒
- MICROSECOND 微秒
- MILLISECOND 毫秒
- SECOND 秒
- MINUTE 分钟
- HOUR 小时
- DAY 天
内置函数
time.now() → Datetime
返回当前时间
time.datetime(year, month, day, hour=0, minute=0, second=0) → Datetime
返回指定时间,所使用的时区为东八区
time.fromtimestamp(timestamp: int) → Datetime
根据秒级时间戳获得时间
time.fromnanotimestamp(timestamp: int) → Datetime
根据纳秒级时间戳获得时间
time.strptime(date_string: string, format: string) → Datetime
解析字符串时间,format 请参考上面的 Datetime.format 中的内容
d = time.strptime("2021-03-06 14:07:21", "2006-01-02 15:04:05")
assert(d.year == 2021)
assert(d.month == 3)
assert(d.day == 6)
assert(d.hour == 14)
assert(d.minute == 7)
assert(d.second == 21)
assert(d.timestamp == 1615010841)
assert(d.nanotimestamp == 1615010841000000000)