当前位置:  开发笔记 > 编程语言 > 正文

如何在Perl中优雅地以RFC822格式打印日期?

如何解决《如何在Perl中优雅地以RFC822格式打印日期?》经验,为你挑选了3个好方法。

如何在Perl中优雅地以RFC822格式打印日期?



1> njsf..:
use POSIX qw(strftime);
print strftime("%a, %d %b %Y %H:%M:%S %z", localtime(time())) . "\n";



2> ysth..:

DateTime套件为您提供了多种不同的方式,例如:

use DateTime;
print DateTime->now()->strftime("%a, %d %b %Y %H:%M:%S %z");

use DateTime::Format::Mail;
print DateTime::Format::Mail->format_datetime( DateTime->now() );

print DateTime->now( formatter => DateTime::Format::Mail->new() );

更新:为某个特定时区留出时间,在now()中添加一个time_zone参数:

DateTime->now( time_zone => $ENV{'TZ'}, ... )



3> Daniel Vérit..:

它可以用strftime,但它%a(日)和%b(月)用当前语言环境的语言表示.

来自man strftime:

%a根据当前区域设置缩写的工作日名称.
%b根据当前区域设置的缩写月份名称.

邮件中的日期字段必须仅使用这些名称(来自rfc2822日期和时间规范):

day         =  "Mon"  / "Tue" /  "Wed"  / "Thu" /  "Fri"  / "Sat" /  "Sun"

month       =  "Jan"  /  "Feb" /  "Mar"  /  "Apr" /  "May"  /  "Jun" /
               "Jul"  /  "Aug" /  "Sep"  /  "Oct" /  "Nov"  /  "Dec"

因此,可移植代码应切换到C语言环境:

use POSIX qw(strftime locale_h);

my $old_locale = setlocale(LC_TIME, "C");
my $date_rfc822 = strftime("%a, %d %b %Y %H:%M:%S %z", localtime(time()));
setlocale(LC_TIME, $old_locale);

print "$date_rfc822\n";

推荐阅读
女女的家_747
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有