根據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