在Fortran语言CTIME输出的格式(Format of CTIME output in For

2019-09-29 15:56发布

按照目前的GCC文档 ,当我打电话CTIME我应该得到格式化这样的日期:“星期六8月19日18点13分十四秒1995年”。 不过,我运行GCC 4.8.1(MinGW的)和输出我得到的是这样的:“95年8月19日18时13分14秒”。 事实上,我有GCC(0.5)的一个古老的版本,我测试,和在同一台机器上该版本正确格式的输出。 有一些办法可以让在记录格式CTIME输出,还是我卡住写我自己的例程获取格式? 我需要的格式感谢我处理一些遗留代码。

Answer 1:

首先,请在发布GFortran错误的GCC的Bugzilla https://gcc.gnu.org/bugzilla 。 有没有保证,张贴到计算器的bug报告不会迷失在噪音。 FWIW,我申请了这个bug在https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61310 。

对于一些背景,这种变化在GFortran是由于为了摆脱线程安全的C库函数如的ctime()。 POSIX提供了一个线程安全的变体称为ctime_r(),它从一些如,实际上,不同的接口(某些商业Unix系统中支持基于POSIX标准,其中ctime_r具有不同参数的草稿功能),盲蝽象运行的问题受到影响过去的26个字节的规范说应该是足够的,等等。 最终,POSIX 2008年放弃并标记ctime_r为过时和推荐使用的strftime()代替。 所以GFortran遵循了这一建议,经过测试显示的strftime()的“%C”符在相同的格式的ctime生成的字符串(),只要该程序是在默认的“C”语言环境。 作为GFortran本身不落的区域设置(通过调用setlocale),这是因此被视为不够好。 不幸的是,你已经发现了,的strftime()在MSVC libc中不生成的ctime() - 为%C符像串。 无论如何,这应该是现在固定的,希望好这段时间。

在任何情况下,使用标准的DATE_AND_TIME是远比解析的ctime的输出更强劲。



Answer 2:

从链接给你:

[...]除非应用程序已调用的setlocale,输出将默认区域,长度为24和形式的“星期六8月19日18时13分十四秒1995年”。 在其他语言环境,更长的字符串可能会导致。

所以输出取决于当前区域(你可能有一个不同的地区选择您的机器上比写的文档的家伙)。



文章来源: Format of CTIME output in Fortran