我的平台是Linux。我希望在给定输入(例如Apr 3, 2014, 5:28 PM
。
2014-04-03T17:28:54.864Z
我目前的Perl脚本。
#!/usr/bin/perl
use lib '/tmp/DateTime/Format';
use DateTime::Format::ISO8601;
my $date = "2014-04-03T17:28:54.864Z";
my $iso8601 = DateTime::Format::ISO8601 -> new;
my $dt = $iso8601->parse_datetime( $date );
print "Date before conversion *******-> \"$date\"\n";
my $s6 = $dt->strftime("%b %-d, %Y, %I:%M %p");
print "Date after conversion *******-> \"$s6\"\n";
它给出输出Apr %-d, 2014, 05:28 PM
。当月或小时的日期是单个数字时,我不希望零或空格填充。当日期和小时都是一位数时,我希望输出为Apr 3, 2014, 5:28 PM
。
答案 0 :(得分:0)
我看到valid strftime
patterns中没有列出%-d
选项。
您可以使用%e
来获得领先的空间而不是前导零,但是,由于您对此进行了折扣,您可以单独获取该日期,然后更改它并在格式字符串中使用该更改的值,例如(未经测试,但你会得到这个想法):
# Get day and remove leading zero.
my $dayofmonth = $dt->strftime("%d");
$dayofmonth =~ s/^0//;
# Construct format string from "hard-coded" day.
my $s6 = $dt->strftime("%b " . $dayofmonth . ", %Y, %I:%M %p");
答案 1 :(得分:0)
试试这个:
my $s6 = $dt->format_cldr('MMM d, Y, h:mm a');
它使用了模块:
DateTime :: Format :: CLDR - 解析和格式化CLDR时间模式
您可以找到有记录的here。
答案 2 :(得分:0)
由于%d
和%e
以外的日期没有任何strftime
模式,因此简单的解决方案就是在事后编辑结果
$s6 =~ s/\s+/ /g;
这会将您的脚本更改为以下内容:
use strict;
use warnings;
use DateTime::Format::ISO8601;
my $date = "2014-04-03T17:28:54.864Z";
my $iso8601 = DateTime::Format::ISO8601->new;
my $dt = $iso8601->parse_datetime( $date );
print qq{Date before conversion *******-> "$date"\n};
my $s6 = $dt->strftime("%b %e, %Y, %I:%M %p");
$s6 =~ s/\s+/ /g;
print qq{Date after conversion *******-> "$s6"\n};