2013-05-04 54 views
3

是否有可能在将来仅使用Perl核心模块为任意日期进行时区转换?Perl时区转换 - 但只能使用核心模块

可以说我有天:月:年,小时:分钟的时区X(假设它是一个完全合格的时区如美国/纽约),我需要将其转换成时区Y(说亚洲/加尔各答)

一些注意事项:

1)这是OSX(狮子或以上)

2)我知道如何使用DateTime和DateManip做,但这些都不是核心模块,并且需要一个C编译器在场安装。我试图将我的程序分发给'非技术'用户 - 他们可以在帮助下完成perl模块安装,但在尝试获取XCode,命令行工具等时却崩溃了。有些人试图安装DateTime,但他们陷入错误/依赖并被放弃。

3)我尝试使用tzset的组合;和ENV TZ - 但不能用于任意日期 - 只适用于当地时间(这意味着,我可以将'now time'转换为任何时区)

+0

分配您的程序与所有已编译的依赖关系→PAR :: Packer或其他。这样,你也可以使用最新的perl。但从长远来看,自动化或以其他方式简化编译器安装会更好。 – amon 2013-05-04 14:53:53

+0

我理解OP的问题。仅在OS X上安装Xcode(下载> 1GB)仅仅是因为“需要编译一个perl模块”并不是最佳解决方案。知道你有什么好的手册(有例子和“足够深”的解释)如何分发perl应用程序与预编译模块和/或(嵌入perl)呢?这也有趣:) – jm666 2013-05-04 15:28:50

+0

另外,一般来说,要小心将来的日期。时区规则随着政客的奇想而改变。 :) – 2013-05-04 19:42:36

回答

5

使用POSIX核心模块。例如:

use POSIX; 

$ENV{TZ} = 'Europe/Madrid'; 
$time_t = POSIX::mktime(10, 30, 17, 4, 4, 113); 
print POSIX::ctime($time_t); #<-- prints: Sat May 4 17:30:10 2013 

$ENV{TZ} = 'Europe/London'; 
print POSIX::ctime($time_t); #<-- prints: Sat May 4 16:30:10 2013 
+0

你,先生,摇滚!谢谢。 – user1361529 2013-05-04 17:03:39