根据current GCC documentation,当我打电话给CTIME时,我应该得到如下格式的日期:“Sat Aug 19 18:13:14 1995”。但是,我运行GCC 4.8.1(MinGW),我得到的输出是这样的:“08/19/95 18:13:14”。我实际上有一个我测试过的GCC(0.5)的古老版本,并且在同一台机器上,该版本正确地格式化输出。有没有什么办法可以让CTIME以记录格式输出,还是我坚持写自己的例程来获得这种格式?我需要这种格式感谢我正在处理的一些遗留代码。Fortran的CTIME输出格式
回答
首先,请将GFortran bug发布到GCC bugzilla https://gcc.gnu.org/bugzilla。不能保证发布到stackoverflow的错误报告不会在噪音中丢失。 FWIW,我将这个bug提交到https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61310。
对于一些背景,GFortran的这种变化是由于努力摆脱线程不安全的C库函数,如ctime()。 POSIX提供了一个称为ctime_r()的线程安全变体,它遇到了许多问题,例如实际上不同的接口(一些商业unix支持基于POSIX标准草案的函数,其中ctime_r具有不同的参数),bug规格说应该足够了26字节,依此类推。最后,POSIX 2008放弃了ctime_r标记,并建议使用strftime()代替。因此,GFortran遵循这个建议,在测试后发现带有“%c”说明符的strftime()生成的字符串格式与ctime()相同,只要程序处于默认的“C”语言环境。由于GFortran本身从不设置语言环境(通过调用setlocale),因此这被认为足够好。不幸的是,正如你发现的那样,MSVC libc中的strftime()不会为%c说明符生成类似ctime()的字符串。无论如何,现在应该修复这个问题,希望这次能够取得好成绩。
在任何情况下,使用标准的date_and_time将比解析ctime的输出更健壮。
谢谢,我试着定期向GCC bugzilla填充bug,但我的知识不够好。 –
我对Fortran的能力还不够自信,无法评估问题是一个错误还是仅仅是缺乏理解。感谢您提交错误报告以及您的答案。 –
从你给的链接:
[...]除非应用程序已调用的setlocale,输出将默认区域,长度为24和形式的“星期六18年8月19日的: 1995年11月14日'。在其他语言环境中,可能会导致更长的字符串。
因此,输出取决于您当前的语言环境(并且您的计算机上可能选择了与编写文档的人不同的语言环境)。
是的,我看到了setlocale的提及,但我找不到任何有关操作的信息。你知道我会怎么做吗? –
而不是'ctime()'我会使用符合标准的['date_and_time()'](https://gcc.gnu.org/onlinedocs/gfortran/DATE_005fAND_005fTIME.html#DATE_005fAND_005fTIME)。从那里,你可以建立你自己的(便携式)时间戳。 –
由于这是我正在处理的遗留代码,因此与Fortran 77兼容的子程序将更可取。我很想知道setlocale是如何工作的。 –
- 1. FORTRAN格式化输出
- 2. Fortran 90格式化输出
- 3. Fortran的未格式化输入/输出
- 4. Fortran格式的浮点数输出
- 5. GNU Fortran语言的ctime相当于IBM XL FORTRAN
- 6. 使用'ctime'库延迟C++的输出
- 7. Fortran未格式化输出的文件名约定
- 8. 现代Fortran:无标签的输出格式
- 9. 使用Fortran中的通配符无格式输出
- 10. 如何格式化Fortran在Maxima中的输出
- 11. Fortran格式,写
- 12. 问题使用格式化Fortran`写(6,*)`输出
- 13. 格式输出
- 14. 输出格式
- 15. 输出格式
- 16. 格式输出
- 17. 输出格式
- 18. Fortran读取Arcview输出
- 19. Fortran新输出文件
- 20. Fortran无格式文件格式
- 21. 格式化输出
- 22. Python格式输出
- 23. 格式SQL输出
- 24. Java输出格式
- 25. 格式输出Itertools.Products
- 26. Json格式输出
- 27. Python输出格式
- 28. RubyMine输出格式
- 29. 格式化输出
- 30. ruby输出格式
不是你的问题的答案,但你可能会发现https://github.com/milancurcic/datetime-fortran有用。 – milancurcic