2014-11-05 114 views
1

我想將GMT時間字符串轉換爲我的系統時區。例如, 星期二11月4 22時03分03秒2014 GMT以GMT格式轉換爲當前時區的時間

我的機器的時區是PST,所以輸出應該是:2014年11月4日14時03分03秒的PST

我能做到這在bash,但能找不到perl的任何解決方案。

擊溶液=> timestamp_local = date "+%Y-%m-%d %H:%M:%S %Z" -d "$timestamp_GMT"

任何人有在Perl溶液? PS:我必須處理一個巨大的文件(大約100-200MB的文本文件)。所以,我想要一個優化的解決方案。

+0

您可以使用系統命令從perl腳本中調用您的bash解決方案。 – GriffinG 2014-11-05 01:49:28

+1

你有['Time :: Local'](http://perldoc.perl.org/Time/Local.html)嗎? – 2014-11-05 01:56:37

+0

@GriffinG我有一個巨大的文件,這個轉換的調用系統會不利地影響我的腳本的運行時間。我應該在這個問題中提到這一點。 – Abhijeet 2014-11-05 21:21:12

回答

0

POSIX庫應該足以做到這一點;

use strict; 
use feature qw/say/; 
use POSIX qw(strftime tzset); 

say strftime("%Y %d %m %H:%M:%S GMT", gmtime(time)); # GMT 
say strftime("%Y %d %m %H:%M:%S %Z", localtime(time)); # Local Time 

# Set to custom timezone 
$ENV{TZ} = 'America/Los_Angeles'; 
tzset; 
say strftime("%Y %d %m %H:%M:%S %Z", localtime(time)); # Custom Zone 
3

DateTime和朋友很簡單。

#!/usr/bin/perl 

use strict; 
use warnings; 
use 5.010; 

use DateTime::Format::Strptime; 
use DateTime; 

my $format = '%a %b %d %H:%M:%S %Y %Z'; 
my $time_string = 'Tue Nov 04 22:03:03 2014 GMT'; 

my $dt_p = DateTime::Format::Strptime->new(
    pattern => $format, 
    time_zone => 'UTC', 
); 

my $time = $dt_p->parse_datetime($time_string); 

say $time->strftime('%a %b %d %H:%M:%S %Y %Z'); 

$time->set_time_zone('America/Los_Angeles'); 

say $time->strftime('%a %b %d %H:%M:%S %Y %Z'); 

更新:this old answer展示瞭如何做核心模塊時間::件非常類似的東西。