pav*_*imo 4 perl datetime date epoch
Solaris 10 似乎不太喜欢我。我正在尝试运行一个简单的脚本来接受日期并返回该日期的纪元:
#!/usr/bin/perl -w
use strict;
use Time::ParseDate;
my $date1 = "Mon Mar 27 05:54:08 CDT 2009";
#Convert to seconds since start of epoch
my $time1 = parsedate($date1);
print $time1;
Run Code Online (Sandbox Code Playgroud)
在 RHEL 机器上工作得很好,但在 Solaris 上就搞砸了(两者都有 5.8.8 Perl),给出以下错误消息。
无法在 @INC 中找到 Date/Parse.pm(@INC 包含:/usr/perl5/5.8.4/lib/sun4-solaris-64int /usr/perl5/5.8.4/lib /usr/perl5/site_perl/ 5.8.4/sun4-solaris-64int /usr/perl5/site_perl/5.8.4 /usr/perl5/site_perl /usr/perl5/vendor_perl/5.8.4/sun4-solaris-64int /usr/perl5/vendor_perl/5.8。 4 /usr/perl5/vendor_perl .) 在 try1.pl 第 3 行。 BEGIN 失败——编译在 try1.pl 第 3 行中止。
这里出了什么问题?..如何纠正这个问题?
哦..差点忘了,我无法更改/安装/修改此 Solaris 机器上的任何内容,该脚本需要发送给运行 Solaris 10 的客户!所以要求他安装模块绝对不是一个选择。:(
错误消息表明它在 Perl 库包含路径 ( @INC )中找不到模块 Date::Parse 。
该模块可从CPAN(综合 Perl 存档网络)获得。如果您需要的 Perl 模块未包含在基本安装中,通常 (>90%) 可以从 CPAN(事实上的Perl 模块存档站点)获取。
您的问题已通过 CPAN 模块(CPAN 模块用于从 CPAN 检索模块)文档得到解决。我建议从常见问题解答问题 5开始,“我不是 root,如何在个人目录中安装模块?”
您应该能够使用 Time::Piece 来完成此操作,它是 Perl 5.10的核心(此处更正:它不是 5.8 的核心)。这是我的机器上的一个例子。参见man strftime
、man strptime
和perldoc Time::Piece
。在文档中,您想要检查Date ParsingTime::Piece
部分。(Solaris 计算机上的转换详细信息可能有所不同。我现在正在使用 OS X 工作。)
#!/usr/bin/env perl
use strict;
use warnings;
use Time::Piece;
my $date = Time::Piece->strptime("Tue Apr 7 12:46:59 2009",
"%a %b %e %H:%M:%S %Y");
my $epoch_date = $date->epoch;
print "$epoch_date\n";
Run Code Online (Sandbox Code Playgroud)
编辑:解析器在 CDT 上阻塞(%Z 似乎无法识别它),因此您可能需要分两步执行此操作。以下对我有用:
my $string = "Mon Mar 27 05:54:08 CDT 2009";
$string =~ s/CDT/-0500/; # Replace timezone with offset from UTC
my $date = Time::Piece->strptime($string, "%a %b %e %H:%M:%S %z %Y");
my $epoch_date = $date->epoch;
print "$epoch_date\n";
Run Code Online (Sandbox Code Playgroud)
然而,现在我们遇到了 CDT => -0500 与 CST => -0600 的额外问题。我正式讨厌夏令时。
归档时间: |
|
查看次数: |
23049 次 |
最近记录: |