在编写 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
的最简单方法是什么?
“简单”包含“易于编写”和“易于内存”。
最佳答案
在标准POSIX
中使用strftime
模块。 strftime
的参数在 Perl 的绑定(bind)中,旨在与 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
检索您本地时区的时间.
https://stackoverflow.com/questions/1814196/