Minying’s Blog

Just another WordPress.com weblog

DateTimePicker 顯示民國年

發文者為 minying 於 四月 22, 2009

為了限制使用者輸入問題,一般有關日期的輸入項,會使用 DateTimePicker 控制項。有些系統是使用民國年格式,所以也常造成一些使用者介面的問題。現在有兩個狀況,第一個是 DateTimePicker 的顯示即顯示民國年,第二個是點選後轉為民國年或指定格式。

一. DateTimePicker 的顯示即顯示民國年(修改系統地區及語言選項的日期)

通常控制台裡設定的都是西曆(中文),所以 DateTimePicker 的 Format 屬性若是選擇 Long 則顯示「2009年04月22日」或選擇 Short 則顯示「2009/04/22」。

p08

若在自訂地區選項中的月曆類型選擇「中華民國曆」,完整日期樣式可改為「ggyyyy’年’MM’月’dd’日’」,則 DateTimePicker 的 Format 屬性若是選擇 Long 則顯示「中華民國98年04月22日」或選擇 Short 則顯示「98/04/22」。

p09

二. DateTimePicker 的顯示即顯示民國年(使用Win32API的方式)

若不想修改系統設定,要由程式去改的話,就要使用Win32API的方式。

宣告一些常數,可參考最後面的資料

    Const LOCALE_SLONGDATE = &H20
    Const LOCALE_SSHORTDATE = &H1F
    Const LOCALE_STIME = &H1E
    Const LOCALE_SDATE = &H1D
    Const LOCALE_ICALENDARTYPE = &H1009
    Private Declare Function GetSystemDefaultLCID Lib “kernel32″ () As Integer
    Private Declare Function SetLocaleInfo Lib “kernel32″ Alias “SetLocaleInfoA” (ByVal Locale As Integer, ByVal LCType As Integer, ByVal lpLCData As String) As Integer

新增兩個副程式

    Private Sub EngCalendar() ”設定系統月曆類型為西元年
        SetLocaleInfo(GetSystemDefaultLCID, LOCALE_ICALENDARTYPE, “1″)
        SetLocaleInfo(GetSystemDefaultLCID, LOCALE_SSHORTDATE, “yyyy/MM/dd”)
        SetLocaleInfo(GetSystemDefaultLCID, LOCALE_SLONGDATE, “yyyy’年’MM’月’dd’日’”)
    End Sub

    Private Sub ChtCalendar() ”設定系統月曆類型為民國年
        SetLocaleInfo(GetSystemDefaultLCID, LOCALE_ICALENDARTYPE, “4″)
        SetLocaleInfo(GetSystemDefaultLCID, LOCALE_SSHORTDATE, “‘民國’yyy’年’MM’月’dd’日”)
        ‘SetLocaleInfo(GetSystemDefaultLCID, LOCALE_SDATE, “-”)          ‘設定日期分隔符號
        ‘SetLocaleInfo(GetSystemDefaultLCID, LOCALE_SLONGDATE, “ggyyyy’年’MM’月’dd’日’”)     ‘設定完整日期樣式
    End Sub

在 Form Load 時,call ChtCalendar() ,將系統改為中華民國曆,Form Closing 時 call EngCalendar() 改回西曆(中文),還有 DateTimePicker 的 Format 屬性要設為 Short。因為是設定簡短日期樣式 SetLocaleInfo(GetSystemDefaultLCID, LOCALE_SSHORTDATE, “‘民國’yyy’年’MM’月’dd’日”)

參考資料:如何讀取和變更與 API 函式,系統日期    http://support.microsoft.com/kb/177146/zh-tw

   Hexadecimal Value               Description
   ——————————————————-
   0×00000014            * Local monetary symbol.         *
   0×00000015            * International monetary symbol. *
   0×00000016            * Monetary decimal separator.    *
   0×00000017            * Monetary thousand separator.   *
   0×0000001D            * Date separator.                *
   0×0000001E            * Time separator.                *
   0×0000001F            * Short date format string.      *
   0×00000020            * Long date format string.       *
   0×0000002A            * Long name for Monday.          *
   0×0000002B            * Long name for Tuesday.         *
   0×0000002C            * Long name for Wednesday.       *
   0×0000002D            * Long name for Thursday.        *
   0×0000002E            * Long name for Friday.          *
   0×0000002F            * Long name for Saturday.        *
   0×00000030            * Long name for Sunday.          *
   0×00000031            * Abbreviated name for Monday.   *
   0×00000032            * Abbreviated name for Tuesday.  *
   0×00000033            * Abbreviated name for Wednesday.*
   0×00000034            * Abbreviated name for Thursday. *
   0×00000035            * Abbreviated name for Friday.   *
   0×00000036            * Abbreviated name for Saturday. *
   0×00000037            * Abbreviated name for Sunday.   *

留言

XHTML: 你可以使用這些標籤: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <pre> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>