10

我是解析 Apple 属性列表格式的Mac::PropertyList模块的作者。我已经将其设计为跨平台工作,但我在使用POSIXstrftime函数时遇到了问题,我使用该函数以 Apple 指定的格式创建日期字段。

use POSIX; 
print 'Epoch is: ' . POSIX::strftime( "%FT%H:%M:%SZ\n", gmtime(978307200) );

在包括 darwin 在内的类 unix 平台上,此调用会产生正确的日期:

2013-09-23T12:34:56Z

在 Windows 上,它产生:

T12:34:56Z

这被报告为CPAN RT #83460。这里的 Windows 是怎么回事?

4

1 回答 1

15

当我写这个问题并研究一切时,我找到了自己的答案。不过,我不希望所有的工作都白费。

我使用的%F格式不可移植,POSIX模块在其strftime条目中这样说:

If you want your code to be portable, your format ("fmt")
argument should use only the conversion specifiers defined by
the ANSI C standard (C89, to play safe).  These are
"aAbBcdHIjmMpSUwWxXyYZ%".

%F是真的%Y-%m-%d,所以我应该使用它。

我的特殊问题是,我知道POSIX模块告诉您可以使用哪些格式说明符进行移植,但我仍然需要查看strftime手册页以了解它们的作用。在查看手册页时,我忘记检查哪些是可移植的。

于 2013-09-24T00:03:21.450 回答