2010-09-24 89 views
2

我使用DateTime Perl模塊來獲取特定時區的時間。時的結果如下如何將DateTime對象轉換爲HTTP格式?

2010-09-24T02:18:52

我怎麼能在打印之前將其轉換爲HTTP格式?

+0

你能澄清 - 你有時區作爲輸入的時間,想要的時間和不同的時區作爲輸出?或者是輸入時間GMT? – 2010-09-24 08:41:56

+0

增加了一些例子,hth。 – 2010-09-24 12:28:53

+1

HTTP標準要求所有的日期/時間戳必須以GMT格式。如果你想要一個不同的時區,它不是真正的HTTP格式。更準確地說,你需要一個[RFC 822](http://www.ietf.org/rfc/rfc822.txt)日期,由[RFC 1123]更新(http://www.ietf.org /rfc/rfc1123.txt)。 – cjm 2010-09-24 19:03:25

回答

4

CPAN有你所需要的:DateTime::Format::HTTP

描述:

該模塊提供了處理[使用]通過HTTP協議使用的日期格式(然後更多一些)功能。

簡介:

use DateTime::Format::HTTP; 

my $class = 'DateTime::Format::HTTP'; 
$string = $class->format_datetime($dt); # Format as GMT ASCII time 
$time = $class->parse_datetime($string); # convert ASCII date to machine time 

更新

您可以在源數據的時區通過,使用日期時間set_time_zone()更改時區,然後用 strftime生成字符串採用'HTTP'格式。例如:(刪除了清晰的行號。)

my $dt = DateTime::Format::HTTP->parse_datetime('2010-03-09T12:34:56', 'EST'); 
warn $class->format_datetime($dt); 
warn $dt->strftime("%a, %d %b %Y %H:%M:%S %Z"); 
$dt->set_time_zone('CET'); 
warn $dt->strftime("%a, %d %b %Y %H:%M:%S %Z"); 

Tue, 09 Mar 2010 17:34:56 GMT 
Tue, 09 Mar 2010 12:34:56 EST 
Tue, 09 Mar 2010 18:34:56 CET 

+0

我試過了。它將一切轉換爲GMT。我想在我的時區 – aks 2010-09-24 06:31:21

+1

@Powertieke,DateTime :: Format :: HTTP的'format_datetime'方法不允許你指定時區。根據[RFC 2616第3.3.1節](http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1),它始終生成GMT:「所有HTTP日期/時間戳必須格林威治標準時間(格林尼治標準時間),無一例外。「 – cjm 2010-09-24 18:51:03

+0

你是對的,我在看parse_datetime()...刪除我的評論,以避免混淆。 – Powertieke 2010-09-24 22:23:25

相關問題