我正在尝试将 Perl 中包含毫秒的变量转换为日期/时间格式。 问题是变量来自大型机 TIMESTAMP,它不能被 Unix/Linux 转换,因为如果我没记错的话,持续时间从 1900-01-01 00:00:00 开始。 提前致谢。
Perl:
my $milli_secs = ((hex(unpack('H*', substr($updt_time,0,3))) * 1099511627776) +
(hex(unpack('H*', substr($updt_time,3,3))) * 65536) +
(hex(unpack('H*', substr($updt_time,6,2)))));
$milli_secs = $milli_secs / 16;
$milli_secs = ($milli_secs * 3.90625) / 1000000;
print "$milli_secs\n";
my $tp = DateTime->from_epoch( epoch => $milli_secs );
print "Date ==> $tp\n";
结果: 3747753982164.99 日期 ==> 120731-08-07T04:49:24
我的变量: EBCDIC 时间戳:D508FF8D00000000 通过一些计算,我有: 纳秒:3.74775398216499e+18 毫秒:3747753982164.99
哪个应该给我(我认为): 2018-10-05 18:46:22.1
最佳答案
您需要获取 1900-01-01 的时间值并将其用作您的纪元:
use Time::Local;
my $epoch = timelocal(0,0,0,1,0,1900);
my $ms = 3747753982164.99;
my $time = $ms / 1000;
print scalar localtime $epoch + $time, "\n";
输出
Fri Oct 5 19:16:05 2018
关于Perl:毫秒到日期+时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56656989/