Как и в Convert month name into number, я хочу использовать DateValue
для создания даты из строки даты. Тем не менее, строка, которая у меня есть, гарантируется в формате США, а компьютер, выполняющий код, работает на немецких локалях.Преобразование значения строки даты из U.S в исходную дату с текущей локалью <> U.S.?
Пример: DateValue
не подходит для "10 Oct 2013 06:50:19"
, это будет успешным для "10 Okt 2013 06:50:19"
, так как «Октябрь» - «Октобер» на немецком языке.
I.e. Мне нужно получить дату из строки в формате даты для конкретной страны, который отличается от языкового стандарта currert.
Как я могу это сделать без жесткого кодирования таблицы перевода имен месяцев между английскими и немецкими?
Кроме того, код должен продолжать работать, если рабочая станция, выполняющая код, переконфигурирована для другой локали, поэтому я ищу способ временно изменить настройки, чтобы получить дату США через 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
О, конечно! Это так просто. Спасибо. – TheBlastOne
Просто [зная, какой винт поворачивать] (http://calvinconaway.com/2007/05/27/knowing-which-screw-to-turn/), и именно поэтому сайты, такие как SO, настолько велики! – AutomatedChaos