Преобразование даты с учётом Гринвича и переходом на летние и зимнее время - 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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д