2012-01-09 63 views
2

我需要創建一個獨立於區域設置的應用程序(D2006),最重要的是所有的dateformats必須相同。Delphi - 獨立於區域設置的應用程序

對於乞討,我想用FormatDateTime('aConstantDefined')替換所有的FormatDateTime('adateformate')。也 Application.UpdateFormatSettingsApplication.UpdateMetricSettings應設置爲False。

還有什麼我應該照顧?

LE:問題是我有2個不同的區域設置的用戶,他們不想統一他們的設置。我知道這聽起來很奇怪,但這是事實。所以,這就是爲什麼我需要使我的應用程序完全獨立於區域設置的原因。

+1

就是這樣,但爲什麼你想忽略區域設置?它對你的用戶不太友善? – 2012-01-09 10:12:26

+0

「獨立於區域設置」,你的意思是說你想忽略本地系統日期/時間/小數點分隔符? – PresleyDias 2012-01-09 10:36:50

+0

@all - 讀我的LE。謝謝。 – RBA 2012-01-09 10:39:41

回答

8

應用您自己的TFormatSettings記錄。適當時撥打電話FormatDateTime('aConstantDefined',ADateTime,myFormatSettings)

這樣可以避免您的應用程序更改系統格式設置時發生意外。 因此,您不必使用Application.UpdateFormatSettingsApplication.UpdateMetricSettings

更新:

我要補充一點,參與區域設置的所有格式的字符串函數,採取TFormatSettings超載參數。它通常用於使應用程序線程安全,但在覆蓋區域設置時會派上用場。在爲了通信/存儲目的而序列化/反序列化數據時,我經常使用這種技術。

+0

只要你在內部操作你的日期爲'TDate'或'TDateTime'而不是字符串,你應該很安全。真正的問題是當你有不同的時區時! (哦,錢也是一件麻煩事。) – 2012-01-09 13:17:38

+1

@LeonardoHerrera,錢總是麻煩:)。是的,保持數據的最佳格式,並且只在I/O期間進行必要的轉換。 – 2012-01-09 13:24:32

+0

@LeonardoHerrera:您可以先通過本地機器的時區偏移調整輸入,然後將UTC日期/時間值存儲在「TDateTime」中。對於大多數操作,您通常可以使用'TDateTime',就好像機器運行在UTC 0一樣。只要確保在比較本地時間戳值時將本地時區考慮在內,轉換回字符串等。 – 2012-01-09 22:07:12