Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Datetime 使用当前语言环境将日期字符串值从美国转换为本地日期<&燃气轮机;美国。?_Datetime_Vbscript_Locale - Fatal编程技术网

Datetime 使用当前语言环境将日期字符串值从美国转换为本地日期<&燃气轮机;美国。?

Datetime 使用当前语言环境将日期字符串值从美国转换为本地日期<&燃气轮机;美国。?,datetime,vbscript,locale,Datetime,Vbscript,Locale,与中一样,我想使用DateValue从日期字符串创建日期。但是,我拥有的字符串保证是美国格式,而执行代码的PC机在德国地区运行 示例:DateValue对于“2013年10月10日06:50:19”失败,对于“2013年10月10日06:50:19”将成功,因为“十月”在德语中是“Oktober” 即,我需要从国家/地区特定日期格式的字符串中获取日期,该格式不同于Curlert语言环境。 如果不硬编码从英文到德文的月名翻译表,我怎么做? 此外,如果执行代码的工作站被重新配置为不同的语言环境,代码

与中一样,我想使用
DateValue
从日期字符串创建日期。但是,我拥有的字符串保证是美国格式,而执行代码的PC机在德国地区运行

示例:
DateValue
对于
“2013年10月10日06:50:19”
失败,对于
“2013年10月10日06:50:19”
将成功,因为“十月”在德语中是“Oktober”

即,我需要从国家/地区特定日期格式的字符串中获取日期,该格式不同于Curlert语言环境。

如果不硬编码从英文到德文的月名翻译表,我怎么做?

此外,如果执行代码的工作站被重新配置为不同的语言环境,代码应该继续工作,因此我正在寻找一种方法,通过
DateValue
临时切换设置以获取美国日期,然后切换回原始设置。当然,这段代码应该是可移植的

下面显示了当前存在此问题的代码。它试图通过查看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

您可以使用
GetLocale
SetLocale
更改区域设置:

这应该适用于有美国日期的德国系统

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

哦,当然!就这么简单。谢谢。只是,这就是为什么网站如此伟大的原因!