使用当前区域设置<>将日期字符串值从美国转换为本机日期我们。?

时间:2013-10-10 07:10:34

标签: datetime vbscript locale

Convert month name into number一样,我想使用DateValue从日期字符串创建日期。但是,我保证的字符串是美国格式,而执行代码的PC在德语区域设置上运行。

示例:DateValue "10 Oct 2013 06:50:19"失败,"10 Okt 2013 06:50:19"失败,因为“十月”是德语中的“Oktober”。

即。我需要从特定于国家/地区的日期格式的字符串中获取日期,该日期格式与当前的区域设置不同。

如果不对英语 - 德语月份名称翻译表进行硬编码,我该怎么做呢?

此外,如果为不同的语言环境重新配置执行代码的工作站,代码应继续工作,所以我正在寻找一种方法来临时切换设置以通过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

1 个答案:

答案 0 :(得分: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