如何在Perl中将纪元时间转换为正常时间?

如何在Perl中将纪元时间转换为正常时间?,第1张

概述我正在尝试编写一个Perl脚本来解析日志,其中每行第二个值是日期.该脚本包含三个参数:输入日志文件,开始时间和结束时间.开始和结束时间用于解析每行之间的某个值,该值介于这两次之间.但为了正确运行这个,我将开始和结束时间转换为纪元时间.我遇到的问题是将循环’i’值转换回正常时间以与日志文件进行比较.运行localtime($i)后,我打印该值,只看到打印的参考值而不是实际值. 这是我到目前为止的脚本 我正在尝试编写一个Perl脚本来解析日志,其中每行第二个值是日期.该脚本包含三个参数:输入日志文件,开始时间和结束时间.开始和结束时间用于解析每行之间的某个值,该值介于这两次之间.但为了正确运行这个,我将开始和结束时间转换为纪元时间.我遇到的问题是将循环’i’值转换回正常时间以与日志文件进行比较.运行localtime($i)后,我打印该值,只看到打印的参考值而不是实际值.

这是我到目前为止的脚本(这是一项正在进行的工作):

#!/usr/bin/perluse strict;use warnings;use Time::Local;use Time::localtime;use file::stat;my $sec = 0;my $min = 0;my $hour = 0;my $mday = 0;my $mon = 0;my $year = 0;my $wday = 0;my $yday = 0;my $isdst = 0;########################### Get the engine log date##########################my $date = `grep -m 1 'Metric' "$ARGV[0]" | awk '{print $2}'`;($year,$mon,$mday) = split('-',$date);$mon--;########################################## Calculate the start and end epoch time#########################################($hour,$min,$sec) = split(':',$ARGV[1]);my $startTime = timelocal($sec,$hour,$mday,$year);($hour,$ARGV[2]);my $endTime = timelocal($sec,$year);my $theTime = 0;for (my $i = $startTime; $i <= $endTime + 29; $i++) {        #print "$startTime   $i \n";        $theTime = localtime($i);        #my $DBInstance0 = `grep "$hour:$min:$sec" "$ARGV[0]"`;# | grep 'DBInstance-0' | awk '{print $9}'`;        #print "$DBInstance0\n";        print "$theTime\n";}print "$startTime   $endTime \n";

输出如下:

Time::tm=ARRAY(0x8cbbd40)Time::tm=ARRAY(0x8cbc1a0)Time::tm=ARRAY(0x8cbbe80)Time::tm=ARRAY(0x8cbc190)Time::tm=ARRAY(0x8bbb170)Time::tm=ARRAY(0x8cbc180)Time::tm=ARRAY(0x8cbbf30)Time::tm=ARRAY(0x8cbc170)Time::tm=ARRAY(0x8cbc210)Time::tm=ARRAY(0x8cbc160)1275760356   1275760773

我只能访问核心Perl模块,无法安装任何其他模块.

解决方法 您可以使用ctime,具体取决于您对“正常时间”的定义:

示例代码:

use Time::Local; use Time::localtime; my $time=timelocal(1,2,3,24,6,2010);print "$time\n"; $theTime = ctime($time); print "$theTime\n";

结果:

1279954921Sat Jul 24 03:02:01 2010

此外,您不需要使用Time :: Localtime(which is why you get Time::tm而不是Perl内部本地时间的标准数组/字符串):

use Time::Local; my $time=timelocal(1,2010); print "$time\n"; $theTime = localtime($time); print "$theTime\n";1279954921Sat Jul 24 03:02:01 2010
总结

以上是内存溢出为你收集整理的如何在Perl中将纪元时间转换为正常时间?全部内容,希望文章能够帮你解决如何在Perl中将纪元时间转换为正常时间?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/langs/1271337.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存