加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-15 21:04:04 所属栏目:安全 来源:网络整理
导读:我需要使用 Bash将Julian时间戳转换为UNIX中的Regular时间戳. 在Tandem OS上,转换非常简单 – 例: 212186319010244541 $OLSAPP SYSTST 1 #interprettimestamp 212186319010244541#interprettimestamp 212186319010244541 expanded to:2455860 2011 10 25 16
我需要使用 Bash将Julian时间戳转换为UNIX中的Regular时间戳.

在Tandem OS上,转换非常简单 –

例:
212186319010244541

$OLSAPP SYSTST 1> #interprettimestamp 212186319010244541

#interprettimestamp 212186319010244541 expanded to:

2455860 2011 10 25 16 10 10 244 541

我希望在UNIX环境中也这样做.转换将是解析器脚本的一部分.所以单行者将不胜感激.

更新:

Tandem上的INTERPRETTIMESTAMP内置函数返回一个以空格分隔的九个数字列表,包括Julian日数,年,月,日,小时,分钟,秒,毫秒和微秒.

解决方法

假设这个数字是@blahdiblah所说的那样

“a value representing the number of microseconds since January 1,4713 B.C.”

然后你首先需要知道01-JAN-1970的Julian时间戳,这是unix时间的纪元.所以一个cludgy 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日使用的值可能是一小时.因此,您可能需要检查它们以确保它适合您的系统.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读