perl - 格式化DateTime输出

时间:2011-11-27 20:15:13

标签: perl datetime

如何使用DateTime转换我的回报:

This is my date:2011-11-26T20:11:06This is my date:20111126

使用现有代码:

use DateTime qw();
my $dt3 = DateTime->now->subtract(days => 1);
print "This is my date:$dt3\n"

3 个答案:

答案 0 :(得分:10)

ymd是最简单的:

print "This is my date: ", $dt3->ymd(''), "\n";

strftime更通用:

print "This is my date: ", $dt3->strftime('%Y%m%d'), "\n";

您还可以使用特定的(例如DateTime::Format::Atom)和一般(例如DateTime::Format::Strptime)格式助手工具:

use DateTime::Format::Strptime qw( );
my $format = DateTime::Format::Strptime->new( pattern => '%Y%m%d' );
print "This is my date: ", $format->format_datetime($dt3), "\n";

PS - 您的代码将在英格兰或其附近提供日期,而不是您所在的日期。为此,你想要

my $dt3 = DateTime->now(time_zone => 'local');

或更合适

my $dt3 = DateTime->today(time_zone => 'local');

答案 1 :(得分:7)

只需在第二行添加->ymd("")即可。参数""是分隔符,您选择将其作为空字符串。

use DateTime qw();
my $dt3 = DateTime->now->subtract(days => 1)->ymd("");
print "This is my date:$dt3\n"

答案 2 :(得分:0)

在Perl中有大约十几种处理日期的方法。但是,如果您知道日期字符串的格式,则可能没有理由调用datetime模块:

$dt3 =~ /^(\d+)-(\d+)-(\d+)/;
print "This is my date:${1}${2}${3}\n";

我不熟悉DateTime,但如果在显示数据时没有办法格式化数据,我会感到惊讶。

我个人更喜欢这些内容Time::PieceTime::Seconds。自5.10以来,这些模块已成为标准Perl安装的一部分。另外,我发现界面非常简洁。

use Time::Piece;
use Time::Seconds;

my $time = localtime;
$time -= ONE_DAY;

print "This is my date:" . $time->ymd("");

出于某种原因,你不能在同一行上说$time = localtime - ONE_DAY;。我想你需要先创建Time::Piece对象,然后再使用Time::Second常量操作它们。