2

私はこの行のVB6プログラムを持っています:

strDate = Format(Date, "ddmmmyyyy")

Windows for English(米国)のカルチュラル設定に従って、常にこの形式で出力する必要があります。

17Jul2012

残念ながら、文化が他の何か、たとえばフランス語に設定されている場合、私はこれを取得します:

17juil2012

日付形式を常に英語の米国形式を使用するようにする方法はありますか?

4

2 に答える 2

3

カルチャ固有の形式を適用しようとするのではなく、月の名前を次のような単純な関数にハードコーディングしてみませんか。

Private Function GetEnglishDate(ByVal d As Date) As String
    Dim monthNames
    monthNames = Array("", "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec")
    GetEnglishDate = Day(d) & monthNames(Month(d)) & Year(d)
End Function

使用法:

strDate = GetEnglishDate(myDate)
于 2012-07-17T21:39:23.803 に答える
1

組み込みのWindows日付フォーマット機能を使用します。

Option Explicit

Private Type SYSTEMTIME
    wYear           As Integer
    wMonth          As Integer
    wDayOfWeek      As Integer
    wDay            As Integer
    wHour           As Integer
    wMinute         As Integer
    wSecond         As Integer
    wMilliseconds   As Integer
End Type

Private Declare Function GetDateFormat Lib "Kernel32" Alias "GetDateFormatW" ( _
    ByVal Locale As Long, _
    ByVal dwFlags As Long, _
    ByRef lpDate As SYSTEMTIME, _
    ByVal lpFormat As Long, _
    ByVal lpDateStr As Long, _
    ByVal cchDate As Long _
) As Long

Private Declare Function VariantTimeToSystemTime Lib "OleAut32.dll" ( _
    ByVal vtime As Date, _
    ByRef lpSystemTime As SYSTEMTIME _
) As Long

Private Sub Command_Click()

    ' Use French Canadian date - should display "mer., juil. 18 12" for today!
    Label.Caption = FormatDateWithLocale("ddd',' MMM dd yy", Now, 3084)

    ' Use United States date - should display "Wed, July 18 12" for today!
    Labe2.Caption = FormatDateWithLocale("ddd',' MMM dd yy", Now, 1033)

End Sub

Private Function FormatDateWithLocale(ByRef the_sFormat As String, ByVal the_datDate As Date, ByVal the_nLocale As Long) As String

    Dim uSystemTime                 As SYSTEMTIME
    Dim nBufferSize                 As Long

    ' Convert to standard Windows time format.
    If VariantTimeToSystemTime(the_datDate, uSystemTime) = 1 Then

        ' Run "GetDateFormat" just to get the size of the output buffer.
        nBufferSize = GetDateFormat(the_nLocale, 0&, uSystemTime, StrPtr(the_sFormat), 0&, 0&)

        If nBufferSize > 0 Then

            ' The buffer size includes the terminating null char, but all VB strings always include this, therefore allocate a buffer with one less character.
            ' Then rerun the GetDateFormat.
            FormatDateWithLocale = Space$(nBufferSize - 1)
            GetDateFormat the_nLocale, 0&, uSystemTime, StrPtr(the_sFormat), StrPtr(FormatDateWithLocale), nBufferSize

        End If

    End If

End Function

異なるロケール番号を使用するだけです(http://www.dotnetindex.com/articles/990-List-of-Locale-ID--LCID--Values-as-Assigned-by-Microsoft.aspを参照)

日付形式はVB形式とは少し異なります(Mは月です)。

http://msdn.microsoft.com/en-us/library/dd317787.aspx

于 2012-07-18T13:13:13.513 に答える