我有这段代码可以获取最近的星期五,无论当前日期是什么:
for(my $i = 1; $i < 8; $i++) {
my $t = time() + $i * 24 * 3600;
next unless (localtime($t))[6] == 5; # friday
$nextfri = scalar(localtime($t));
last;
}
这将以以下格式返回日期:Fri May 11 13:47:24 2018
但是,我必须将此日期用于 SQL 查询,因此我必须使用以下格式的日期:YYYY-MM-DD
我试过使用 Time::Piece:
print STDERR "Time::Piece: " . Time::Piece->strptime("$nextfri", '%Y %m %d'), "\n";
但我收到此错误:Error parsing time at /usr/local/lib/perl/5.18.2/Time/Piece.pm line 481, <DATA> line 1.
如何更改日期格式?
最佳答案
使用POSIX::strftime
将本地时间部分转换为格式化字符串。
use strict;
use warnings;
use POSIX qw{strftime};
my $nextfri;
for (my $i = 1; $i < 8; $i++) {
my @t = localtime(time() + $i * 24 * 3600);
next unless $t[6] == 5; # friday
$nextfri = strftime '%Y %m %d', @t;
last;
}
但我建议您使用类似 DateTime 的库相反,因为上面的代码错误地假设每天有 24 小时,因此可能会导致错误的结果。
use strict;
use warnings;
use DateTime;
my $nextfri = DateTime->now;
do {
$nextfri->add(days => 1);
} until ($nextfri->day_of_week == 5);
print $nextfri->ymd(' '); # or '-'
关于perl - 如何使用 Perl 将本地时间转换为 YYYY-MM-DD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50260968/