Activestate Perl与POSIX perl的任何陷阱

时间:2013-07-24 20:57:06

标签: perl perl-module

我有一个依赖于DateTime模块的脚本。 作为将我的开发集成到一个环境中的一部分,我已经从linux和cygwin中的命令行更改为Windows 7上的Eclipse。

在linux / cygwin中有以下几行:

$time_value = strftime "%F %H:%M:%S %p", localtime;

生成时间数据:

2013-07-24 13:46:19

但是从Eclipse,在Activestate PERL环境中(安装了所有相关模块) 我明白了:

%F %H:%M:%S %p

奇怪的是,它是完全相同的脚本文件。我正在使用安装在两种环境中的DateTime模块,但此输出表明模块出现故障。

知识渊博的PERL大师的任何想法?

更新:

我正在使用POSIX qw(strftime),如下所示: How can I parse a strftime formatted string in Perl?

我的目标是以这种格式转换日期:     2010年8月7日星期三18:22:30 -0600

进入任何一个MySQL date_format表单。

因此,如果POSIX使程序不可移植,我的选择是什么?

2 个答案:

答案 0 :(得分:3)

您使用的strftime函数不是来自DateTime模块。该模块纯粹是面向对象的,并使用方法:$dt->strftime($format)

您似乎已导入strftime from the POSIX module。对于有问题的功能,对可移植性进行了一些限制:

  

[...]请参阅系统的“strftime()”联机帮助页,了解有关这些和其他参数的详细信息。

     

如果希望代码可移植,则格式(“fmt”)参数应仅使用ANSI C标准定义的转换说明符(C89,以便安全地播放)。这些是"aAbBcdHIjmMpSUwWxXyYZ%"。但即使这样,一些转换说明符的结果也是不可移植的。

您看到%F不在这些便携式格式说明符中。

答案 1 :(得分:0)

解决方案是将%F改为%Y-%m-%d。