Преобразование даты с учётом Гринвича и переходом на летние и зимнее время - VB
Формулировка задачи:
Добрый день.
Возникла проблема.
На сервере стоит система, которая пишет дату в оракл по гринвичу (+0) в системных полях.
(Это конечно не правильно, но править это долго и сейчас срочно нужен костыль.)
Я сначала делал через константу. Т.е. разбивал дату на части, и к часам прибавлял + 4 часа.
Но из-за перехода на зимнее и летнее время, это не подошло. Так как постоянно нужно залазить и править с +4 на +3 и т.д.
Я хотел сделать следующее, но не знаю как правильно описать.
Макросом вытащить дату из системного поля. (к примеру она равна 12:00)
И в макросе эту дату преобразовать + 4 часа. Через региональные настройки.
Т.е. макрос будет вытаскивать системные региональные настройки машины. (так как макрос запускается на клиентской машине)
Далее с учётом этих региональных настроек преобразовывать дату при необходимости +4 часа или +3 часа.
Либо как то делать усилием самого оракла, что бы он исправлял дату на правильную. Беря региональные настройки с самого сервера. (Что возможно правильнее.)
Возникла проблема.
На сервере стоит система, которая пишет дату в оракл по гринвичу (+0) в системных полях.
(Это конечно не правильно, но править это долго и сейчас срочно нужен костыль.)
Я сначала делал через константу. Т.е. разбивал дату на части, и к часам прибавлял + 4 часа.
Но из-за перехода на зимнее и летнее время, это не подошло. Так как постоянно нужно залазить и править с +4 на +3 и т.д.
Я хотел сделать следующее, но не знаю как правильно описать.
Макросом вытащить дату из системного поля. (к примеру она равна 12:00)
И в макросе эту дату преобразовать + 4 часа. Через региональные настройки.
Т.е. макрос будет вытаскивать системные региональные настройки машины. (так как макрос запускается на клиентской машине)
Далее с учётом этих региональных настроек преобразовывать дату при необходимости +4 часа или +3 часа.
Либо как то делать усилием самого оракла, что бы он исправлял дату на правильную. Беря региональные настройки с самого сервера. (Что возможно правильнее.)
Решение задачи: «Преобразование даты с учётом Гринвича и переходом на летние и зимнее время»
textual
Листинг программы
Function GetConvertTimeUTC (ByVal sGetDateTime) As String
Dim sDTNow As String
Dim sDTNowParseTime As String
Dim sDTNowUTC As String
Dim sDTNowParseTimeUTC As String
Dim sDTDiffInSS As String
'sGetDateTime = "30.04.2014;13:46:26:00"
' Берем текущее дату и время, и мировые дату и время. Выбираем из них время. И вычисляем разницу между всемирным временем и текущим(в секундах)
sDTNow = Application.Utility.Now
sDTNowParseTime = Right(sDTNow,8)
sDTNowUTC = Application.Utility.NowUTC
sDTNowParseTimeUTC = Right(sDTNowUTC,8)
sDTDiffInSS = Application.Utility.TimeDiff (sDTNowParseTimeUTC,sDTNowParseTime)
' Разницу в секундах, добавим к нашему времени. Предварительно отделив миллисекунды.
Dim sDateTimeParseDT As String
Dim sMssParseDT As String
Dim sDTAddSeconds As String
sDateTimeParseDT = Left(sGetDateTime,19)
sMssParseDT = Right(sGetDateTime,3)
sDTAddSeconds = Application.Utility.TSAddSeconds (sDateTimeParseDT,sDTDiffInSS)
'Преобразование даты и времени в нужный вид.
Dim sData As String
Dim sTime As String
Dim sDateTimeOut As String
sData = Left(sDTAddSeconds,10)
sTime = Right(sDTAddSeconds,8)
sDateTimeOut = sData & " " & sTime & sMssParseDT
GetConvertTimeUTC = sDateTimeOut
End function