Bash 在Mac OSX-BSD上将unix历元时间转换为人类可读的日期
在我的Mac OSX上,我的bash脚本有一个纪元时间Bash 在Mac OSX-BSD上将unix历元时间转换为人类可读的日期,bash,date,unix,epoch,Bash,Date,Unix,Epoch,在我的Mac OSX上,我的bash脚本有一个纪元时间123439819723。我可以通过date-r 123439819723将日期转换为人类可读的格式,这给了我Fri Aug 26 09:48:43 EST 5881 但我希望日期采用mm/ddd/yyyy:hh:mi:ss格式。date--date选项在我的机器上不起作用 给你: # date -r 123439819723 '+%m/%d/%Y:%H:%M:%S' 08/26/5881:17:48:43 在bash脚本中,可以有如下内容
123439819723
。我可以通过date-r 123439819723
将日期转换为人类可读的格式,这给了我Fri Aug 26 09:48:43 EST 5881
但我希望日期采用mm/ddd/yyyy:hh:mi:ss
格式。date--date
选项在我的机器上不起作用 给你:
# 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
要使用OS X
date
转换UNIX历元时间,请使用
date -j -f %s 123439819723
-j
阻止日期
尝试设置系统时钟,并且-f
指定输入格式。您可以添加+
来设置输出格式,就像命令Shell中的GNUdate
一样
[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
在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]
对于Linux(使用GNU coreutils 5.3+),可以使用较少的按键来实现:
date-d@1608185188
#2020年12月16日星期三22:06:28太平洋标准时间
添加一个带“+”前缀的参数,用于表示格式。在OSX上,我必须指定unix时间作为最后一个参数:date-j-f%s 1374432952
在FreeBSD上与此相同<代码>日期-j-f%s 1374432952工作正常。这在MacOS上工作正常,但纪元时间需要以秒为单位提供(与问题中的毫秒相反),即5881年?我喜欢你的乐观。我认为更可能的是数量123439819723
指的是毫秒,而不是秒,所以你想要date-r 123439819'+%m/%d/%Y:%H:%m:%S'
,这给出了11/29/1973:08:50:19
。