Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 在Mac OSX-BSD上将unix历元时间转换为人类可读的日期_Bash_Date_Unix_Epoch - Fatal编程技术网

Bash 在Mac OSX-BSD上将unix历元时间转换为人类可读的日期

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脚本中,可以有如下内容

在我的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脚本中,可以有如下内容:

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中的GNU
date

一样

[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