以后只使用Perl核心模块,是否可以为'任意'日期进行时区转换?
让我说我有这一天:月份:年份,小时:分钟时区X(假设它是一个完全合格的时区,如America / New_York),我需要将其转换为时区Y(比如亚洲/加尔各答)
一些注意事项:
1)这适用于OSX(Lion或以上)
2)我知道如何使用DateTime和DateManip,但这些不是核心模块,需要安装C编译器。我正在尝试将我的程序分发给“非技术”用户 - 他们可以在帮助下进行perl模块安装,但在尝试使用XCode,命令行工具等工作时会崩溃。有些人试图安装DateTime,但他们陷入了错误/依赖关系并放弃了。
3)我尝试使用tzset的组合;和ENV TZ - 但不能用于任意日期 - 仅适用于当地时间(这意味着,我可以将'现在时间'转换为任何时区)
答案 0 :(得分: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