在 Mac OSX 上将 unix 纪元时间转换为人类可读的日期 - BSD
Posted
技术标签:
【中文标题】在 Mac OSX 上将 unix 纪元时间转换为人类可读的日期 - BSD【英文标题】:Convert unix epoch time to human readable date on Mac OSX - BSD 【发布时间】:2014-03-24 09:49:08 【问题描述】:在我的 Mac OSX 上,我的 bash 脚本有一个纪元时间123439819723
。我可以通过date -r 123439819723
将日期转换为人类可读的格式,这给了我Fri Aug 26 09:48:43 EST 5881
。
但我希望日期采用mm/ddd/yyyy:hh:mi:ss
格式。 date --date
选项在我的机器上不起作用。
【问题讨论】:
添加一个以“+”为前缀的参数来表示格式。 【参考方案1】:给你:
# date -r 123439819723 '+%m/%d/%Y:%H:%M:%S'
08/26/5881:17:48:43
在 bash 脚本中你可以有这样的东西:
if [[ "$OSTYPE" == "linux-gnu"* ]]; then
dayOfWeek=$(date --date @1599032939 +"%A")
dateString=$(date --date @1599032939 +"%m/%d/%Y:%H:%M:%S")
elif [[ "$OSTYPE" == "darwin"* ]]; then
dayOfWeek=$(date -r 1599032939 +%A)
dateString=$(date -r 1599032939 +%m/%d/%Y:%H:%M:%S)
fi
【讨论】:
5881 年?我喜欢你的乐观。我认为123439819723
的数量更可能是指毫秒,而不是秒,所以你想要 date -r 123439819 '+%m/%d/%Y:%H:%M:%S'
,它给出了 11/29/1973:08:50:19
。【参考方案2】:
要使用 OS X date
转换 UNIX 纪元时间,请使用
date -j -f %s 123439819723
-j
阻止date
尝试设置系统时钟,-f
指定输入 格式。您可以添加+<whatever>
来设置输出 格式,与GNU date
一样。
【讨论】:
在 OSX 上,我必须将 unix 时间指定为最后一个参数:date -j -f %s 1374432952
FreeBSD 上也一样。 date -j -f %s 1374432952
工作。
这适用于 MacOS,但需要以秒为单位提供纪元时间(而不是毫秒 - 来自问题)
效果很好,谢谢!【参考方案3】:
来自命令外壳
[aks@APC ~]$ date -r 1474588800
Fri Sep 23 05:30:00 IST 2016
[aks@APC ~]$ date -ur 1474588800
Fri Sep 23 00:00:00 UTC 2016
[aks@APC ~]$ echo "1474588800" | xargs -I date -jr -u
Fri Sep 23 00:00:00 UTC 2016
【讨论】:
【参考方案4】:在 Linux(使用 GNU coreutils 5.3+)的情况下,可以使用更少的击键来实现:
date -d @1608185188
#Wed Dec 16 22:06:28 PST 2020
在 Mac 上可能需要安装 coreutils (brew install coreutils
)
【讨论】:
自 2022 年 1 月起不适用于 mac os。 @jamescampbell 你有 gnu coreutils 5.3+ 吗? ?以下是我运行上述命令时发生的情况:❯ date -d @1608185188 usage: date [-jnRu] [-d dst] [-r seconds] [-t west] [-v[+|-]val[ymwdHMS]] ... [-f fmt date | [[[mm]dd]HH]MM[[cc]yy][.ss]] [+format]
没有。你的答案是关于 Linux 的。 OP 提出的问题是关于 Mac OS / Unix 的。它们是有区别的。根据您对错误操作系统的回答,您似乎应该删除您的答案,并请再次查看 OP 发布的原始问题。我的评论是有效的,我的跟进是有效的。如果您想回答如何在 linux 上进行日期转换,请先找人问这个问题并在那里发布您的答案(或自己问)。否则,您将一个方形钉子强行插入一个圆孔并失败并浪费人们时间阅读您的无效答案。我试过了!
如果您可能多花 1 分钟,您会看到这篇文章 ***.com/a/9805125/1215344,它解释了 Unix / Linux 日期包的差异,是的,coreutils 将安装 gdate
,这与本机(Mac OS 附带)日期包完全不同。所以,你可以更新你的答案说,“如果你想添加一个包来让它在 Mac OS 上工作,你可以做 brew install coreutils
并让 gdate 具有与 Linux date 命令相同的功能。”这似乎可以接受。【参考方案5】:
在 Mac OS 上运行的组合解决方案。
外壳代码:
T=123439819723
D=$(date -j -f %s $(($T/1000)) '+%m/%d/%Y:%H:%M:%S').$(($T%1000))
echo "[$T] ==> [$D]"
输出:
[123439819723] ==> [11/29/1973:11:50:19.723]
或者一行:
> echo 123439819723 | read T; D=$(date -j -f %s $(($T/1000)) '+%m/%d/%Y:%H:%M:%S').$(($T%1000)); echo "[$T] ==> [$D]"
[123439819723] ==> [11/29/1973:11:50:19.723]
【讨论】:
以上是关于在 Mac OSX 上将 unix 纪元时间转换为人类可读的日期 - BSD的主要内容,如果未能解决你的问题,请参考以下文章
在 Informix 中将 DATETIME 转换为 Unix 纪元
如何在 C 中将 10131520 转换为 Unix 纪元时间?