49

我正在开发一个 Perl 程序,并坚持(我认为是)一个微不足道的问题。我只需要以 '06/13/2012' 格式构建一个字符串(始终为 10 个字符,因此小于 10 的数字为 0)。

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

use Time::localtime;
$tm=localtime;
my ($day,$month,$year)=($tm->mday,$tm->month,$tm->year);
4

7 回答 7

66

您可以快速完成,只需使用一个POSIX函数。如果您有一堆带有日期的任务,请参阅模块DateTime

use POSIX qw(strftime);

my $date = strftime "%m/%d/%Y", localtime;
print $date;
于 2012-06-13T18:13:22.463 回答
58

您可以使用Time::Piece,它不需要安装,因为它是一个核心模块,并且自版本 10 以来已与 Perl 5 一起分发。

use Time::Piece;

my $date = localtime->strftime('%m/%d/%Y');
print $date;

输出

06/13/2012


更新

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

my $date = localtime->dmy('/');

这会产生与我原来的解决方案相同的结果

于 2012-06-13T18:14:44.587 回答
17
use DateTime qw();
DateTime->now->strftime('%m/%d/%Y')   

表达式返回06/13/2012

于 2012-06-13T21:11:00.773 回答
9

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

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";
于 2012-06-13T18:45:10.030 回答
4

Unix 系统的 Perl 代码:

# Capture date from shell
my $current_date = `date +"%m/%d/%Y"`;

# Remove newline character
$current_date = substr($current_date,0,-1);

print $current_date, "\n";
于 2014-05-14T06:04:12.207 回答
4
use Time::Piece;
...
my $t = localtime;
print $t->mdy("/");# 02/29/2000
于 2015-01-21T10:54:10.510 回答
2

使用 perl 中的内置函数“sprintf”可以轻松地用前导零格式化数字(文档包含:perldoc perlfunc)

use strict;
use warnings;
use Date::Calc qw();
my ($y, $m, $d) = Date::Calc::Today();
my $ddmmyyyy = sprintf '%02d.%02d.%d', $d, $m, $y;
print $ddmmyyyy . "\n";

这给了你:

14.05.2014

于 2014-05-14T10:31:22.717 回答