Преобразование даты с учётом Гринвича и переходом на летние и зимнее время - VB

Узнай цену своей работы

Формулировка задачи:

Добрый день.
Возникла проблема.
На сервере стоит система, которая пишет дату в оракл по гринвичу (+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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.4 из 5