【问题标题】:Convert date string value from U.S. to native Date with current locale <> U.S.?使用当前语言环境<>美国将日期字符串值从美国转换为本地日期?
【发布时间】:2013-10-17 19:54:19
【问题描述】:

Convert month name into number 一样,我想使用DateValue 从日期字符串创建日期。但是,我所拥有的字符串保证是美国格式,而执行代码的 PC 是在德国语言环境下运行的。

示例:DateValue 对于 "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

【问题讨论】:

    标签: datetime vbscript locale


    【解决方案1】:

    您可以使用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
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-30
    • 2016-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-17
    相关资源
    最近更新 更多