3

Convert month name into numberのようDateValueに、日付文字列から日付を作成するために使用したいと思います。ただし、コードを実行する PC がドイツ語ロケールで実行されている間、私が持っている文字列は米国形式であることが保証されています。

例:DateValueは失敗しますが、 「10 月」はドイツ語で「10 月」である"10 Oct 2013 06:50:19"ため、 は成功します。"10 Okt 2013 06:50:19"

つまり、現在のロケールとは異なる国固有の日付形式の文字列から日付を取得する必要があります。

英語からドイツ語への月名変換テーブルをハードコーディングせずに、どうすればそれを行うことができますか?

DateValueまた、コードを実行するワークステーションが別のロケール用に再構成された場合、コードは引き続き機能するはずです。そのため、一時的に設定を切り替えて米国の日付を取得し、元の設定に戻す方法を探しています。もちろん、そのコードはWindowsフレーバーの中で移植可能でなければなりません...

現在この問題が発生しているコードを以下に示します。http ヘッダーをのぞいて、特定のサーバーのシステム時刻を取得しようとします。英語での現在の (短い) 月名がドイツ語で異なる場合、失敗します。

Public Function GetServerTimeFromUrl (ByVal Url,ByRef DT)

    Dim HttpRequest: Set HttpRequest = CreateObject("Microsoft.XMLHttp")
    HttpRequest.Open "GET" , Url, false
    HttpRequest.Send

    Dim Result: Result=(HttpRequest.Status = 200)
    If Result then

        Dim DateS: DateS=HttpRequest.getResponseHeader ("Date")
        DateS=Right (DateS,Len (DateS)-InStr (DateS,",")-1)
        ' DateS has weekday removed

        DateS=Left (DateS,InStrRev (DateS," ")-1)
        ' DateS has timezone removed

        ' DateS now holds something like "09 Sep 2013 11:49:54" 
        Dim ServerTimeGMT: ServerTimeGMT=DateValue (DateS)+TimeValue (DateS)

        Dim Delta: Delta=CreateObject("WScript.Shell").RegRead("HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation\ActiveTimeBias")    
        ' Delta now holds "skew" value for time zone including DST
        DT=DateAdd("n", -Delta,ServerTimeGMT)
        Result=true
    End If
    GetServerTimeFromUrl=Result
End Function
4

1 に答える 1

2

とを使用GetLocaleSetLocaleて、ロケールを変更できます。

これは、米国の日付を持つドイツのシステムで機能するはずです

option explicit

dim currentLocale
currentLocale = GetLocale()

SetLocale 1033       ' 1033 is the EN-US locale
msgbox datevalue("9 Oct 2013 06:50:19")
' Output: 10/9/2013

' Put back the original locale
SetLocale currentLocale

またはその逆です。米国のシステムでのドイツの日付

SetLocale 1031       ' 1031 is the German locale
msgbox datevalue("9 Okt 2013 06:50:19")
' Output: 09.10.2013
于 2013-10-11T06:57:21.810 に答える