2013-01-03 4 views
3

나는 현재 시간을 얻고있는 펄 스크립트를 가지고있다. 그러나 나는 또한 현재 시간보다 45 일 전에 날짜를 얻고 싶다.Perl 과거 날짜 사용법?

* 이미 두 번째 방법을 포맷 그것이 이유입니다 날짜 : 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"; 
+1

"오류 반환 계속"당신이 무엇을하고 있는지 보여주고 무엇을이 달 분리 후 – ysth

+0

을 제공 오류, 날짜 및 Calc 메서드가 성공적으로 수행되었습니다. –

답변

5

이 바람직 날짜 시간, DateManip, 또는 날짜 : 석회질을 사용하지만, 당신도 할 수 있습니다

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"; 
+0

내 생각에이 솔루션은 특히 유지 보수를 수행하는 사람에게 읽기가 더 어렵습니다. DateTime의 빼기를 선호합니다. 그러나 DateTime 모듈을 사용할 수없는 경우 ... – fanlim

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"); 
+0

아쉽게도이 스크립트에서는 DateTime을 사용할 수 없습니다. 원래 질문에서 나는 그것을 선언 했어야했다. –

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"; 
+2

'$ output = $ forty_five_days_ago-> strftime ("% Y, % m, % d, % H, % M, % S");도 트릭을 수행합니다. – ikegami

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 설정, 그것은 여기에 중요합니다.

관련 문제