在编写Perl脚本时,我经常发现需要获取以字符串形式表示的当前时间,该字符串的格式为YYYY-mm-dd HH:MM:SS
(例如2009-11-29 14:28:29
)。
在执行此操作时,我发现自己走的路很繁琐:
man perlfunc
/localtime
搜索本地时间-重复五次(/
+ \n
)到达手册页($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
从联机帮助页复制到我的脚本中。 my $now = sprintf("%04d-%02d-%02d %02d:%02d:%02d", $year, $mon, $mday, $hour, $min, $sec);
my $now = sprintf("%04d-%02d-%02d %02d:%02d:%02d", $year+1900, $mon, $mday, $hour, $min, $sec);
my $now = sprintf("%04d-%02d-%02d %02d:%02d:%02d", $year+1900, $mon+1, $mday, $hour, $min, $sec);
尽管上述过程有效,但远非最佳。我敢肯定有一种更聪明的方法,所以我的问题很简单:
在Perl中获取当前日期/时间的
YYYY-mm-dd HH:MM:SS
的最简单方法是什么?“简单”既包括“易于编写”又包括“易于记忆”。
最佳答案
在标准 strftime
模块中使用POSIX
。 Perl绑定(bind)中 strftime
的参数旨在与 localtime
和 gmtime
的返回值保持一致。相比
strftime(fmt, sec, min, hour, mday, mon, year, wday = -1, yday = -1, isdst = -1)
与
my ($sec,$min,$hour,$mday,$mon,$year,$wday, $yday, $isdst) = gmtime(time);
示例命令行用法是
$ perl -MPOSIX -le 'print strftime "%F %T", localtime $^T'
或从源文件中
use POSIX;
print strftime "%F %T", localtime time;
某些系统不支持
%F
和%T
速记,因此您必须明确使用print strftime "%Y-%m-%d %H:%M:%S", localtime time;
要么
print strftime "%Y-%m-%d %H:%M:%S", gmtime time;
请注意,
time
在被调用时返回当前时间,而 $^T
固定为程序启动时的时间。使用 gmtime
,返回值是格林尼治标准时间的当前时间。使用 localtime
检索您当地时区的时间。关于perl - 在Perl中快速到达YYYY-mm-dd HH:MM:SS,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1814196/