在linux bash中将ISO日期转换为纪元以来的秒数

Posted

技术标签:

【中文标题】在linux bash中将ISO日期转换为纪元以来的秒数【英文标题】:Convert an ISO date to seconds since epoch in linux bash 【发布时间】:2014-03-13 17:58:08 【问题描述】:

我有一个 ISO 格式 YYYY-MM-DDTHH:SS 的日期(例如 2014-02-14T12:30)。我想在 linux bash 中仅使用 date 命令在几秒内转换它。

所有日期均指 UTC 语言环境。

我知道这个问题很容易重复......关于将日期从一种格式转换为另一种格式有数十亿个问题,但我找不到我的特定场景

谢谢你...

【问题讨论】:

【参考方案1】:

使用 GNU 日期(来自 GNU coreutils 包),使用 -d 指定要解析的日期,使用 %s 指定自纪元以来的秒数

$ date -d"2014-02-14T12:30" +%s
1392381000

请注意,这会将要解析的日期解释为您的本地时区。如果您希望date 使用特定时区,则必须通过变量 TZ(更改date 的默认时区)或在日期字符串中指定该时区。对于 UTC:

$ TZ=UTC date -d"2014-02-14T12:30" +%s
1392381000

或在字符串中,根据 ISO 8601:

$ date -d"2014-02-14T12:30Z" +%s
1392381000

请参阅ISO 8601 on Wikipedia,了解如何在日期字符串中指定其他时区。

【讨论】:

这正是我尝试过的......但如果与epochconverter.com 给出的数字相比,它似乎报告了一个错误的数字。你能解释一下发生了什么吗? 我的意思是,“日期”输出似乎比 www.epochconverter.com 上给出的值晚了几个小时 我尝试了“-u”选项,但它似乎不起作用。 “-u”表示设置/打印UTC坐标 按照 BMW 的建议或在日期输入中包含时区,因此 $ date -d"2014-02-14T12:30 EDT" +%s 这个答案没有解决时区问题。我编辑添加了这个 - 希望没关系。【参考方案2】:

如果您安装gdate 来处理具有纳秒精度时区的日期字符串会更容易

install coreutils 你会得到gdate

在 Mac 上 brew install coreutils

gdate --date="2010-10-02T09:35:58.203Z" +%s%N

这在将时间序列值插入 influxdb 时特别有用

在 shell 脚本中variable = $(gdate --date="2010-10-02T09:35:58.203Z" +%s%N)

echo $variable

【讨论】:

您的答案似乎是指特定的 UNIX 变体(大概是 MacOS X)。请澄清您在谈论什么变体 - 否则这个答案只会令人困惑。例如,在 Linux 上没有“install”命令,在 Debian 上有一个“coreutils”包,但它不包含“gdate”(只有“date”)。 HI @sleske 抱歉,我已离开该项目,没有您要求的环境信息

以上是关于在linux bash中将ISO日期转换为纪元以来的秒数的主要内容,如果未能解决你的问题,请参考以下文章

在Java中将ISO 8601时间戳字符串转换为纪元秒[重复]

将 ISO8601 字符串转换为自纪元以来的毫秒数

如何在PHP中将日期YYYY-MM-DD转换为纪元[重复]

将 Zulu 时间戳转换为自纪元以来的秒数,并将其与 bash 脚本 Mac 中的当前时间进行比较

在文本文件中将纪元转换为标准的bash脚本[重复]

如何在 python 中将 1970 年前的日期转换为纪元? [复制]