Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Преобразование даты с учётом Гринвича и переходом на летние и зимнее время / 5 сообщений из 5, страница 1 из 1
21.08.2014, 16:50
    #38725841
alekseich.n
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование даты с учётом Гринвича и переходом на летние и зимнее время
Добрый день.
Возникла проблема.
На сервере стоит система, которая пишет дату в оракл по гринвичу (+0) в системных полях.
(Это конечно не правильно, но править это долго и сейчас срочно нужен костыль.)

Я сначала делал через константу. Т.е. разбивал дату на части, и к часам прибавлял + 4 часа.
Но из-за перехода на зимнее и летнее время, это не подошло. Так как постоянно нужно залазить и править с +4 на +3 и т.д.

Я хотел сделать следующее, но не знаю как правильно описать.
Макросом вытащить дату из системного поля. (к примеру она равна 12:00)
И в макросе эту дату преобразовать + 4 часа. Через региональные настройки.

Т.е. макрос будет вытаскивать системные региональные настройки машины. (так как макрос запускается на клиентской машине)
Далее с учётом этих региональных настроек преобразовывать дату при необходимости +4 часа или +3 часа.

Либо как то делать усилием самого оракла, что бы он исправлял дату на правильную. Беря региональные настройки с самого сервера. (Что возможно правильнее.)
...
Рейтинг: 0 / 0
21.08.2014, 21:34
    #38726084
The_Prist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование даты с учётом Гринвича и переходом на летние и зимнее время
alekseich.n,

Если дата/время нужны правильные(независимо от локальных настроек) - берите данные о времени с какого-либо сайта.
...
Рейтинг: 0 / 0
22.08.2014, 11:13
    #38726386
kiv-1980
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование даты с учётом Гринвича и переходом на летние и зимнее время
А чем Вас sysdate не устраивает?
...
Рейтинг: 0 / 0
22.08.2014, 11:22
    #38726396
kiv-1980
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование даты с учётом Гринвича и переходом на летние и зимнее время
При этом предварительно делать
Код: plsql
1.
alter session time_zone 'Europe/Moscow'


вы будете получать нужное время .
...
Рейтинг: 0 / 0
22.08.2014, 19:46
    #38727097
alekseich.n
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование даты с учётом Гринвича и переходом на летние и зимнее время
Всем спасибо.
Через БД Oracl делать нельзя. (Т.е. можно, но нам не положено. В рамках задачи.)

В общем выкрутился таким образом:
Макросом достал документ, как объект. В строке которого был злосчастный SysTimeStamp во времени UTC.
Отправил его в функцию, которую написал.

Преобразование даты пришлось делать именно так. Так как Application.Utility.Replace обрезал драгоценные секунды.

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
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
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Преобразование даты с учётом Гринвича и переходом на летние и зимнее время / 5 сообщений из 5, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]