0

我有一个依赖于 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?

我的目标是以这种格式转换日期:Wed, 07 Aug 2010 18:22:30 -0600

转换成任意多个 MySQL date_format 形式。

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

4

2 回答 2

3

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

看来您已经strftime从 POSIX 模块导入了。对于有问题的功能,对可移植性进行了一些限制:

[...]strftime()有关这些和其他参数的详细信息,请参阅系统的“”手册页。

如果您希望您的代码是可移植的,您的格式(“fmt”)参数应该只使用由 ANSI C 标准(C89,为了安全起见)定义的转换说明符。这些是"aAbBcdHIjmMpSUwWxXyYZ%"。但即便如此,某些转换说明符的结果也是不可移植的。

您会发现这%F不在这些可移植格式说明符中。

于 2013-07-24T21:18:17.930 回答
0

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

于 2013-08-08T22:05:35.020 回答