Bash 在UNIX中将Julian时间戳转换为常规时间

Bash 在UNIX中将Julian时间戳转换为常规时间,bash,timestamp,julian-date,Bash,Timestamp,Julian Date,我需要在UNIX中使用Bash将Julian时间戳转换为常规时间戳 在串联操作系统上,转换非常简单- 例如: 212186319010244541 $OLSAPP SYSTST 1> #interprettimestamp 212186319010244541 #interprettimestamp 212186319010244541 expanded to: 2455860 2011 10 25 16 10 10 244 541 我希望在UNIX环境中也这样做。转换将是解析器脚本

我需要在UNIX中使用Bash将Julian时间戳转换为常规时间戳

在串联操作系统上,转换非常简单-

例如: 212186319010244541

$OLSAPP SYSTST 1> #interprettimestamp 212186319010244541

#interprettimestamp 212186319010244541 expanded to:

2455860 2011 10 25 16 10 10 244 541
我希望在UNIX环境中也这样做。转换将是解析器脚本的一部分。因此,我们将非常感谢一行

更新


Tandem上的InterpretatTimestamp内置函数返回一个以空格分隔的九个数字列表,包括朱利安日数、年、月、日、小时、分钟、秒、毫秒和微秒。

假设该数字如@blahdiblah所说

表示自公元前4713年1月1日以来微秒数的值

然后您首先需要知道1970年1月1日的Julian时间戳,这是unix时间的纪元。因此,一个笨拙的oracle查询给出

210866803200000000
理论上,你可以用一个shell命令来计算自1970年1月1日以来的秒数

unixtime=$(( ( 212186319010244541 - 210866803200000000 ) / 1000000 ))
这方面的问题是:

  • 您仍然需要格式化它
  • 您的bash可能不喜欢带有18位数字的整数算术。(认为64位可以,但不是32位)
现在,如果您安装了perl,您可以使用
bigint
POSIX
模块解决这些问题。作为一个外壳“一”内衬,它看起来像

perl -mbigint -mPOSIX -e 'print( POSIX::strftime("%Y-%m-%d %T",localtime( ($ARGV[0]-210866803200000000)/1000000 ) )."\n")' 212186319010244541

2011-10-25 15:10:10
1小时的差异可能是由于夏令时的差异。它可以是在perl中,或者更可能是我在1970年1月1日使用的值可能是一个小时。因此,您可能需要检查这两种转换器,以确保其适合您的系统。

这是MJD转换器

MJD比epoch低3506716800

# date -d '1858-11-17 UTC' +%s
-3506716800
例如: MDJ 57153是2015年5月11日星期一00:00:00 UTC

# date -d @`echo 57153*86400-3506716800|bc`
Mon May 11 00:00:00 UTC 2015

212186319010244541的大纪元时间是多少?这是真的朱利安时间吗,就像在朱利安日历中一样?从一些人的观点来看:朱利安时间戳是“一个代表自公元前4713年1月1日以来微秒数的值”。你如何定义“常规时间戳”?我能猜到2011年,10,25,16,10,10是年,月,月,日,小时(16点),10分钟,10秒。但剩下的数字是多少,即2455860244541?我在你引用的文档中没有提到输出格式。关于在Unix中转换日期,在S.O.上有很多问题。最简单的解决方案是使用GNU日期实用程序,如果您使用的是linux,那么几乎可以肯定它是/bin/date,因此
man-date
也会给您提供很多信息。祝你好运。在我的系统中,朱利安时间戳的起点似乎是公元前4713年1月1日中午,而不是一天的开始。上述结果产生12小时的偏移量。在这种情况下,减去21086676000000000,而不是上面的数字,以得到正确的时间。@Edwin我有类似的要求:将Julian date numeric从Tandem系统转换为unix历元时间;你的版本(减去21086676000000000)会产生我需要的准确时间戳。非常感谢。我正在尝试将212186319010244541转换为Unix时代,但上述解决方案均不起作用。@AkshayNaik您可以看到它在相关步骤中被破坏。