我正在研究工作中的Perl程序并坚持(我认为)一个微不足道的问题。我只需要构建一个格式为'06 / 13/2012'的字符串(总是10个字符,所以0表示小于10的数字)。
这是我到目前为止所拥有的:
use Time::localtime;
$tm=localtime;
my ($day,$month,$year)=($tm->mday,$tm->month,$tm->year);
答案 0 :(得分:55)
您可以快速执行此操作,仅使用一个POSIX功能。如果您有大量具有日期的任务,请参阅模块DateTime。
use POSIX qw(strftime);
my $date = strftime "%m/%d/%Y", localtime;
print $date;
答案 1 :(得分:54)
您可以使用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('/');
这会产生与原始解决方案相同的结果
答案 2 :(得分:12)
use DateTime qw();
DateTime->now->strftime('%m/%d/%Y')
表达式返回06/13/2012
答案 3 :(得分: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";
答案 4 :(得分:3)
use Time::Piece;
...
my $t = localtime;
print $t->mdy("/");# 02/29/2000
答案 5 :(得分:2)
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";
答案 6 :(得分:1)
使用&#34; sprintf&#34;,perl中的内置函数(文档: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";
这会给你:
2014年5月14日