3

現在の時刻を取得しているperlスクリプトがありますが、現在の時刻の45日前の日付も取得しようとしています。ここに私が持っているものがあります:

* すでに date::calc DHMS を使用してみました。そのため、2 番目の形式はそのままですが、エラーが返され続けます

# 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");

Set the time_zone, it's important here.

于 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 に答える