SH:如何将“ Nov 26 23:59:00 2022 GMT”日期转换为时间戳?

时间:2020-05-17 19:12:43

标签: shell timestamp

我想将字符串“ Nov 26 23:59:00 2022 GMT”转换为时间戳1669507140000。我检查了man date以获得此命令:

date  -d "Nov 26 23:59:00 2022 GMT" +"%s"

但是他的回报:1669507140(最后三个零缺失)。

谁能告诉我我想念的东西吗?谢谢。

1 个答案:

答案 0 :(得分:0)

我在系统(YMMV)上使用的 date 命令的版本将向我们展示如果在调用中添加--debug标志,该命令的作用...

$ date  -d "Nov 26 23:59:00 2022 GMT" +"%s" --debug
date: parsed date part: (Y-M-D) 2020-11-26
date: parsed time part: 23:59:00
date: parsed number part: year: 2022
date: parsed zone part: UTC+00
date: input timezone: parsed date/time string (+00)
date: using specified time as starting value: '23:59:00'
date: starting date/time: '(Y-M-D) 2022-11-26 23:59:00 TZ=+00'
date: '(Y-M-D) 2022-11-26 23:59:00 TZ=+00' = 1669507140 epoch-seconds
date: timezone: system default
date: final: 1669507140.000000000 (epoch-seconds)
date: final: (Y-M-D) 2022-11-26 23:59:00 (UTC)
date: final: (Y-M-D) 2022-11-27 07:59:00 (UTC+08)
1669507140

调试日志向我们显示%s格式将显示从纪元开始的秒数。另外,可以使用修改后的格式字符串来实现纳秒精度(我在日期字符串中添加了.001以证明其有效):

$ date -d "Nov 26 23:59:00.001 2022 GMT" +"%s.%N" --debug
date: parsed date part: (Y-M-D) 2020-11-26
date: parsed time part: 23:59:00
date: parsed number part: year: 2022
date: parsed zone part: UTC+00
date: input timezone: parsed date/time string (+00)
date: using specified time as starting value: '23:59:00'
date: starting date/time: '(Y-M-D) 2022-11-26 23:59:00 TZ=+00'
date: '(Y-M-D) 2022-11-26 23:59:00 TZ=+00' = 1669507140 epoch-seconds
date: timezone: system default
date: final: 1669507140.001000000 (epoch-seconds)
date: final: (Y-M-D) 2022-11-26 23:59:00 (UTC)
date: final: (Y-M-D) 2022-11-27 07:59:00 (UTC+08)
1669507140.001000000

我们可以使用管道将 awk 舍入为最终形式的毫秒数(请注意,我在此处的日期字符串中使用.0005来显示舍入):

$ date -d "Nov 26 23:59:00.0005 2022 GMT" +"%s.%N" | awk '{ printf("%d\n", int($0 * 1000) + (int($0 * 2000) % 2)) }'
1669507140001

进一步的注意事项...。​​以下是我正在使用的 date 命令的版本:

$ date --version
date (GNU coreutils) 8.30
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by David MacKenzie.