perl - 在 perl 中将系统日期转换为 iso 8601 格式

标签 perl iso8601

我希望将系统日期转换为 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";

当前输出为:
Time zone *******-> "-04:00"
Current date *******-> "2014-06-03T03:46:07-04:00"

我希望当前日期的格式为“2014-07-02T10:48:07.124Z”,以便我可以计算两者之间的差异。

最佳答案

Perl 的 DateTime包 ( on CPAN ) 可以很容易地为您生成 ISO8601 日期,但有一个警告。
DateTime 返回的字符串将采用 UTC,但没有时区说明符。这应该没问题,因为根据 ISO8601 规范,如果未指定时区,则应假定为 UTC。但是,并非所有解析器都完全遵守规范。为了使我的日期更可靠,我附加了一个 Z到我从 DateTime 得到的字符串的末尾,所以这是我推荐的代码:

use DateTime;
my $now = DateTime->now()->iso8601().'Z';

关于perl - 在 perl 中将系统日期转换为 iso 8601 格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24009757/

相关文章:

java - 无法将 ISO 8601 格式的字符串解析为 Java 8 日期,在偏移量中缺少冒号

arrays - 如何使用 Template Toolkit 访问数组的元素?

perl - 为什么 perl 会针对不同类型的警告提示不同的行?

c# - AspNet Core 中 UTC 的 Http 查询参数

R - 给定 Olson 时区的 UTC 到本地时间

javascript - 在javascript中解析ISO 8601基本日期时间格式

perl - 为什么在尝试使用 Perl 的 Archive::Extract 解压缩时得到的文件名是 ARRAY(0x7fd5c22f7cd8)?

perl - 规范化 ASCII 字符

linux - 面对使用 perl expect 编写代码的问题

firebird - 如何在 Firebird DB 中将日期时间格式化/转换为 ISO8601?