2010-01-04 71 views
2

forte編譯器中是否有任何編譯器選項在Solaris 5.8中創建time_t 64位?我需要開發32位的庫,我無法將其更改爲64位,因爲它會影響現有的客戶端應用程序。在solaris中如何解決時間函數2038問題

+0

'影響現有客戶端應用程序'位是爲什麼Solaris無法解決32位問題。現在開始遷移到64位計劃的工作 - 你只有28年的時間才能完成工作,而且客戶非常頑固,以至於你可能需要全部工作。 – 2010-01-04 14:07:49

+0

我只需要2038年後的日期進行計算,並且不需要Solaris內核中的這種日期。所以我會選擇mark40的建議。 – Andy 2010-01-05 06:45:57

回答

4

除了爲64位編譯之外,Sun尚未爲此提供任何編譯器選項。如果您只需要能夠處理32位應用程序中的2038年後日期(例如,用於30年按揭計算)並且不需要Solaris內核中的此類日期(例如當前時間,文件時間戳),那麼在那裏是可以在應用程序中用來處理這些日期的包。例如y2038是一個簡單的包,它提供了64位time_t樣類型和localtime()相應的替代品,gmtime()ctime()等,如果你不依賴於POSIX接口可以轉而使用像libtai,這也把手閏秒。

2

簡短的回答是否定的,在32位應用程序中,編譯器中沒有選項可以使time_t成爲64位值。它被擴展到64位應用程序的64位值,因爲這似乎是一個很好的改變,但爲了符合所有各種標準,它必須作爲32位應用程序的有符號32位值保存。

如果您想使用64位值來表示時間,那麼您將必須確保返回到現有客戶端應用程序的任何值在返回時不會溢出。如果它們發生溢出,那麼您需要支持將其指定給客戶端應用程序,並瞭解它們將如何處理這些值,這些值都是庫的API的一部分。

相關問題