3

我有一个 perl 脚本,它正在获取当前时间,但我也希望获取当前时间前 45 天的日期。这是我所拥有的:

*已经尝试使用 date::calc DHMS,这就是为什么第二个按原样格式化但它不断返回错误的原因

# get the current time stamp
use POSIX qw( strftime );
my $current_time = strftime("%Y-%m-%d %H:%M:%S", localtime);

print "\n$current_time\n";

# get the date 45 days ago
my $time = strftime("%Y, %m, %d, %H, %M, %S", localtime);

print "\n$time\n\n";
4

4 回答 4

5

你试过DateTime吗?

my $now = DateTime->now( time_zone => 'local' );
my $a_while_ago = DateTime->now( time_zone => 'local' )->subtract( days => 45 );
print $a_while_ago->strftime("%Y, %m, %d, %H, %M, %S\n");
于 2013-01-03T21:15:49.820 回答
5

最好使用 DateTime、DateManip 或 Date::Calc,但您也可以:

use POSIX 'strftime', 'mktime';

my ($second,$minute,$hour,$day,$month,$year) = localtime();
my $time_45_days_ago = mktime($second,$minute,$hour,$day-45,$month,$year);
print strftime("%Y-%m-%d %H:%M:%S", localtime $time_45_days_ago), "\n";
于 2013-01-03T23:35:45.097 回答
3
use DateTime;

my $now = DateTime->now( time_zone=>'local' );
my $then = $now->subtract( days => 45 );
print $then->strftime("%Y, %m, %d, %H, %M, %S");

设置time_zone,这里很重要。

于 2013-01-03T21:17:15.530 回答
2

这是一个简单的解决方案,使用DateTime

use strict;
use warnings;
use DateTime;

my $forty_five_days_ago = DateTime->now(time_zone=>"local")->subtract(days => 45);

my $output = $forty_five_days_ago->ymd(", ");

$output .= ", " . $forty_five_days_ago->hms(", ");

print "$output\n";
于 2013-01-03T21:16:42.427 回答