perl - 如何使用 Perl 将本地时间转换为 YYYY-MM-DD

标签 perl

我有这段代码可以获取最近的星期五,无论当前日期是什么:

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/

相关文章:

windows - 为什么 perl testing dir -d ""在 Windows 上返回 true?错误与否?

Perl:无法通过包定位对象方法栏

perl - 在日志中显示错误并继续抓取其他网址

mysql - 从字段的 mysql 数据库查询中计算现有数组的 Perl 脚本/MySQL 查询

perl - 如何防止 PerlTidy 对齐分配但继续添加单个空格?

XML::XML2JSON "0"元素

regex - 如何划分字符串,我的意思是将 1234567890 转换为 12 :34:56:78:90

sorting - 按值对哈希进行排序

linux - 如何在XML文件中的单词后面添加变量内容

regex - 快速正则表达式 Perl 未终止