2011-11-27 52 views
6

如何转换使用的DateTime从我的回报:perl的 - 格式化的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" 

回答

5

只是在第二行添加->ymd("") 。参数""是您选择为空字符串的分隔符。

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

大约有十几种在Perl中处理日期的方法。但是,如果你知道的日期字符串的格式,也可能没有理由骂日期时间模块:

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

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

我个人比较喜欢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常量操作它们。

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');