2009-01-15 39 views
8

我使用標準的Delphi常量DayMonday等,我想將它們轉換爲本地化的字符串(例如「Lundi」)。是否有簡單的RTL或VCL調用?如何在Delphi中獲取本地化的日期名稱?

+0

不錯的問題的方式,我不得不查找的細節,但它是可能的;-)。 – 2009-01-15 12:28:23

回答

3

想法我找到了「當前區域設置」的簡單方法。

有全局數組LongDayNames []和[]在system.pas

這樣定義ShortDayNames ..

Label.Text = LongDayName[DayMonday]; 

應該工作,例如。 除了返回「星期天」。這是因爲Delphi內部支持兩天編號方案,而DayMonday是ISO8601常量1,而LongDayName數組期望星期日爲一週的第一天。 C++ Builder進一步混淆了事情,因爲字符串數組從零開始,而不是一個。

+0

是的,它們使用GetFormatSettings進行初始化;-)。目標總是有不同的道路,但在這種情況下,它們具有相同的來源。 – 2009-01-15 12:48:14

7

你可以得到不同的區域設置:

var 
    fs : TFormatSettings; 
    x : string; 
begin 
    GetLocaleFormatSettings(GetThreadlocale, fs); 
    x:= FormatDateTime('%mmmm', Now, fs); 
    // etc.. 
end; 

GetThreadLocale給出當前LCID,但你可以使用其他號碼自己。

TFormatSettings記錄:

TFormatSettings = record 
    CurrencyFormat: Byte; 
    NegCurrFormat: Byte; 
    ThousandSeparator: Char; 
    DecimalSeparator: Char; 
    CurrencyDecimals: Byte; 
    DateSeparator: Char; 
    TimeSeparator: Char; 
    ListSeparator: Char; 
    CurrencyString: string; 
    ShortDateFormat: string; 
    LongDateFormat: string; 
    TimeAMString: string; 
    TimePMString: string; 
    ShortTimeFormat: string; 
    LongTimeFormat: string; 
    ShortMonthNames: array[1..12] of string; 
    LongMonthNames: array[1..12] of string; 
    ShortDayNames: array[1..7] of string; 
    LongDayNames: array[1..7] of string; 
    TwoDigitYearCenturyWindow: Word; 
end; 

http://www.microsoft.com/globaldev/reference/lcid-all.mspx見的完整列表。

你甚至可以自己改變格式設置來創建真正的效果。

相關問題