解析日期模式
Parse Date Pattern
我正在尝试使用 awk 将日期转换为特定格式,以下是我尝试过的命令。
$ echo | awk -v Date=`date -d '2019-10-07' '+%Y-%m-%dT%H:%M:%S'` '{print Date}'
2019-10-07T00:00:00
$ echo | awk -v Date=`date -d '2019-10-07T' '+%Y-%m-%dT%H:%M:%S'` '{print Date}'
2019-10-07T01:00:00
$ echo | awk -v Date=`date -d '2019-10-07D' '+%Y-%m-%dT%H:%M:%S'` '{print Date}'
2019-10-07T12:00:00
$ echo | awk -v Date=`date -d '2019-10-07S' '+%Y-%m-%dT%H:%M:%S'` '{print Date}'
2019-10-07T02:00:00
$ echo | awk -v Date=`date -d '2019-10-07U' '+%Y-%m-%dT%H:%M:%S'` '{print Date}'
2019-10-07T00:00:00
这里,不明白为什么日期"2019-10-07T"
returns"2019-10-07T01:00:00"
和"2019-10-07S"
returns"2019-10-07T02:00:00"
等
我试图弄明白T、S、你等的意思,但是没找到。
能请教一下吗?
可能在 awk 中使用这样的东西会更聪明
print strftime("Time = %m/%d/%Y %H:%M:%S", systime())
对于您最初的问题,您可能可以阅读 this
遗憾的是,您完全不可能围绕定义命令 date
可以处理的几乎无限多的 date-input formats 的逻辑思考。然而,令人印象深刻的是,他们能够做到如此出色!尤其是当您意识到人类想出了过多的日期时间格式时。
您发现的是一种叫做 military timezones 的东西,它是另一种书写日期时间的形式,但是是一种有组织的形式。因此,当您要求 date
转换“2019-10-07S”时,它将采用 Sierra 时区 (UTC-6) 中的“2019-10-07T00:00:00”。因此,您的结果应该是“2019-10-06T18:00:00 UTC”。但是,您收到的“2019-10-07T02:00:00”并不相同。那是因为 date
returns 您当地时区的格式字符串,它告诉我您当前的系统设置为 UTC+8。
我们可以将其验证为:
$ TZ="Australia/Perth" date -d "2019-10-07S" "+%FT%T %z %Z"
2019-10-07T02:00:00 +0800 AWST
$ TZ="UTC-8" date -d "2019-10-07S" "+%FT%T %z %Z"
2019-10-07T02:00:00 +0800 UTC
注:注意TZ="UTC-8"
实际上是指UTC+8。此表示法被解释为 Posix 时区。 (参见:U&L: Why does TZ=UTC-8 produce dates that are UTC+8?)
我正在尝试使用 awk 将日期转换为特定格式,以下是我尝试过的命令。
$ echo | awk -v Date=`date -d '2019-10-07' '+%Y-%m-%dT%H:%M:%S'` '{print Date}'
2019-10-07T00:00:00
$ echo | awk -v Date=`date -d '2019-10-07T' '+%Y-%m-%dT%H:%M:%S'` '{print Date}'
2019-10-07T01:00:00
$ echo | awk -v Date=`date -d '2019-10-07D' '+%Y-%m-%dT%H:%M:%S'` '{print Date}'
2019-10-07T12:00:00
$ echo | awk -v Date=`date -d '2019-10-07S' '+%Y-%m-%dT%H:%M:%S'` '{print Date}'
2019-10-07T02:00:00
$ echo | awk -v Date=`date -d '2019-10-07U' '+%Y-%m-%dT%H:%M:%S'` '{print Date}'
2019-10-07T00:00:00
这里,不明白为什么日期"2019-10-07T"
returns"2019-10-07T01:00:00"
和"2019-10-07S"
returns"2019-10-07T02:00:00"
等
我试图弄明白T、S、你等的意思,但是没找到。
能请教一下吗?
可能在 awk 中使用这样的东西会更聪明
print strftime("Time = %m/%d/%Y %H:%M:%S", systime())
对于您最初的问题,您可能可以阅读 this
遗憾的是,您完全不可能围绕定义命令 date
可以处理的几乎无限多的 date-input formats 的逻辑思考。然而,令人印象深刻的是,他们能够做到如此出色!尤其是当您意识到人类想出了过多的日期时间格式时。
您发现的是一种叫做 military timezones 的东西,它是另一种书写日期时间的形式,但是是一种有组织的形式。因此,当您要求 date
转换“2019-10-07S”时,它将采用 Sierra 时区 (UTC-6) 中的“2019-10-07T00:00:00”。因此,您的结果应该是“2019-10-06T18:00:00 UTC”。但是,您收到的“2019-10-07T02:00:00”并不相同。那是因为 date
returns 您当地时区的格式字符串,它告诉我您当前的系统设置为 UTC+8。
我们可以将其验证为:
$ TZ="Australia/Perth" date -d "2019-10-07S" "+%FT%T %z %Z"
2019-10-07T02:00:00 +0800 AWST
$ TZ="UTC-8" date -d "2019-10-07S" "+%FT%T %z %Z"
2019-10-07T02:00:00 +0800 UTC
注:注意TZ="UTC-8"
实际上是指UTC+8。此表示法被解释为 Posix 时区。 (参见:U&L: Why does TZ=UTC-8 produce dates that are UTC+8?)