在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时间戳字符串转换为纪元秒[重复]