我希望系统日期转换为ISO 8601格式.码:
my $now = time();
my $tz = strftime("%z", localtime($now));
$tz =~ s/(\d{2})(\d{2})/$1:$2/;
print "Time zone *******-> \"$tz\"\n";
# ISO8601
my $currentDate = strftime("%Y-%m-%dT%H:%M:%S", localtime($now)) . $tz;
print "Current date *******-> \"$currentDate\"\n";
Run Code Online (Sandbox Code Playgroud)
目前的输出是:
Time zone *******-> "-04:00"
Current date *******-> "2014-06-03T03:46:07-04:00"
Run Code Online (Sandbox Code Playgroud)
我希望当前日期的格式为"2014-07-02T10:48:07.124Z",这样我就可以计算出两者之间的差异.
Bar*_*t B 13
Perl的DateTime
软件包(在CPAN上)可以很容易地为您生成ISO8601日期,但有一点需要注意.
返回的字符串DateTime
将是UTC,但没有时区说明符.这应该没问题,因为根据ISO8601规范,如果没有指定时区,则应假设UTC.但是,并非所有解析器都完全遵守规范.为了使我的日期更加健壮,我将a附加Z
到我得到的字符串的末尾DateTime
,所以这是我推荐的代码:
use DateTime;
my $now = DateTime->now()->iso8601().'Z';
Run Code Online (Sandbox Code Playgroud)
您应该使用gmtime()
而不是localtime()
来获取UTC中的细分时间值。
use POSIX qw(strftime);
my $now = time();
print strftime('%Y-%m-%dT%H:%M:%SZ', gmtime($now)), "\n";
Run Code Online (Sandbox Code Playgroud)
输出:
2014-06-04T10:17:17Z
Run Code Online (Sandbox Code Playgroud)
自2007年以来,Time :: Piece和Time :: Second已作为Perl的标准组成部分被包括在内。
#!/usr/bin/perl
use strict;
use warnings;
use 5.010;
use Time::Piece;
my $time = localtime;
say $time->datetime; # Time in ISO8601 format
say $time->tzoffset; # Time zone offset in seconds
# But tzoffset actually returns a Time::Seconds object
say $time->tzoffset->hours; # Time zone offset in hours (for example)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
9449 次 |
最近记录: |