今天的Perl日期,采用MM/DD/YYYY格式

dva*_*ria 38 formatting perl date

我正在研究工作中的Perl程序,并坚持(我认为)一个微不足道的问题.我只需要构建一个格式为'06/13/2012'的字符串(总是10个字符,所以0表示小于10的数字).

这是我到目前为止所拥有的:

use Time::localtime;
$tm=localtime;
my ($day,$month,$year)=($tm->mday,$tm->month,$tm->year);
Run Code Online (Sandbox Code Playgroud)

Pav*_*sov 56

你可以快速完成,只使用一个POSIX功能.如果您有大量具有日期的任务,请参阅模块DateTime.

use POSIX qw(strftime);

my $date = strftime "%m/%d/%Y", localtime;
print $date;
Run Code Online (Sandbox Code Playgroud)

  • POSIX和DateTime都是*巨大*代码块,并且对于这样一个简单的任务来说太过分了. (6认同)

Bor*_*din 54

你可以使用Time::Piece,它不需要安装,因为它是一个核心模块,并且从版本10开始随Perl 5一起分发.

use Time::Piece;

my $date = localtime->strftime('%m/%d/%Y');
print $date;
Run Code Online (Sandbox Code Playgroud)

产量

06/13/2012
Run Code Online (Sandbox Code Playgroud)


更新

您可能更喜欢使用该dmy方法,该方法采用单个参数,即在结果字段之间使用的分隔符,并避免必须指定完整的日期/时间格式

my $date = localtime->dmy('/');
Run Code Online (Sandbox Code Playgroud)

这产生了与我原始解决方案相同的结果

  • @lepe:有三个实用程序"date"函数,`dmy`,`mdy`和`ymd`,`date`是`ymd`的别名.默认情况下,所有日期都使用标准连字符分隔符生成日期,并且可以传递另一个分隔符,因此`localtime-> ymd`会产生`2015-09-28`和*not*`20150928`.这是这些方法的一大弱点 - 它们本身并不描述它们的作用,这就是我选择`strftime('%m /%d /%Y')的原因. (2认同)

dax*_*xim 12

use DateTime qw();
DateTime->now->strftime('%m/%d/%Y')   
Run Code Online (Sandbox Code Playgroud)

表达式返回 06/13/2012


cha*_*dge 8

如果你喜欢用艰难的方式做事:

my (undef,undef,undef,$mday,$mon,$year) = localtime;
$year = $year+1900;
$mon += 1;
if (length($mon)  == 1) {$mon = "0$mon";}
if (length($mday) == 1) {$mday = "0$mday";}
my $today = "$mon/$mday/$year";
Run Code Online (Sandbox Code Playgroud)

  • 永远[自从Time :: Piece已经进入核心](http://perlpunks.de/corelist/mversion?module=Time%3A%3APiece),不再需要这么做了. (3认同)
  • 使用perl 5.8 vintage 2006,全世界有很多网站在生产.$`perldoc perlhist | perl -ne'die"$ _ \n"如果m/5.9.5.*20 [01].{8} /'`说5.9.5是2007年7月7日发布的 (3认同)
  • `Time :: Piece`出现在5.9.5的核心 (2认同)