Форум программистов, компьютерный форум, киберфорум
Наши страницы
MS Access
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.70/10: Рейтинг темы: голосов - 10, средняя оценка - 4.70
Beginne_r
0 / 0 / 0
Регистрация: 07.12.2012
Сообщений: 41
1

Функция SQL для преобразования Unix времени в обычное

10.07.2013, 22:48. Просмотров 1827. Ответов 7
Метки нет (Все метки)

Здравствуйте!

Подскажите, пожалуйста, существует ли такая функция в SQL, чтобы её параметрами были время в формате Unix и часовой пояс и эта функция возвращала бы время и дату полном формате, например вида 10.07.2012 21:00.

Если нет, то как такое преобразование можно реализовать в Access?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.07.2013, 22:48
Ответы с готовыми решениями:

Функция VBA для сортировки данных в SQL запросе
День добрый. Есть задача сортировки данных при выводе в список на форме....

Unix время конвертировалось в обычное
Нужно что бы xml документа unix время конвертировалось в обычное и выводилось,...

SQL - Ошибка преобразования даты или времени из символьной строки
Имеется текст запроса, надо вывести на экран список товаров, поставленных...

Какой тип использовать для хранения метки времени UNIX в десятичном формате
У меня следующая таблица: -- -- Структура таблицы `chat_msg` -- ...

Перегрузка методов по количеству переменных для преобразования времени
Здравствуйте, только начал учить C++, и получается не все. Уверен, ошибка...

7
mobile
Эксперт MS Access
22918 / 12994 / 2688
Регистрация: 28.04.2012
Сообщений: 14,228
10.07.2013, 23:18 2
Попробуйте
Visual Basic
1
[ПолеДатыВремени]=Format(DateAdd("s",Clng([ПолеUnixВремени]), #01/01/1970#), "dd.mm.yyyy hh:nn")
Правда, насчет часового пояса затрудняюсь. Возможно, просто нужно к Clng([ПолеUnixВремени]) добавить разницу в секундах между часовыми поясами
1
Beginne_r
0 / 0 / 0
Регистрация: 07.12.2012
Сообщений: 41
11.07.2013, 16:32  [ТС] 3
Чего-то мой Access 2003 ругается на DateAdd, то ли это функция для VB, то ли в новых версиях поддерживается, а мне надо для 2003

нет ли каких-то ещё способов, именно средствами самого SQL извлечь дату и время из UNIX-формата?
0
mobile
Эксперт MS Access
22918 / 12994 / 2688
Регистрация: 28.04.2012
Сообщений: 14,228
11.07.2013, 16:43 4
Beginne_r, нет ли у вас референсах паразитных миссингов? Проверьте - редактор ВБА (нажать ALT+F11) - меню Tools - References. Искать среди библиотек помеченных галочкой вверху списка, слово MISSING перед названием библиотеки

Добавлено через 3 минуты
Впрочем, можно и без DateAdd
Visual Basic
1
[ПолеДатыВремени]=Format(Cdbl([ПолеUnixВремени])/86400 + #01/01/1970#), "dd.mm.yyyy hh:nn")
1
Beginne_r
0 / 0 / 0
Регистрация: 07.12.2012
Сообщений: 41
11.07.2013, 17:10  [ТС] 5
Спасибо, заработал первый вариант, я просто его в конструкторе Access прописывал, а там надо вместо запятой - точку с запятой разделяющую параметры, но в SQL при этом всё нормально отображается

и ещё попробовал - работает без функции Clng - так ли она нужна?

НО всё равно не понятно как добиться, чтобы время было в конкретном часовом поясе, просто добавлять часы не получится, время-то переводят два раза в год, а UTC всегда постоянен
0
mobile
Эксперт MS Access
22918 / 12994 / 2688
Регистрация: 28.04.2012
Сообщений: 14,228
11.07.2013, 17:43 6
Цитата Сообщение от Beginne_r Посмотреть сообщение
НО всё равно не понятно как добиться, чтобы время было в конкретном часовом поясе, просто добавлять часы не получится, время-то переводят два раза в год, а UTC всегда постоянен
Можно с функцией. Забыл, но кажется, что часы переводятся 1 октября ("1001") и 1 мая ("0501"). Поправите
Visual Basic
1
2
3
4
5
6
7
Public Function timeZone(nZone As Integer)
    If Format(Date, "mmdd") >= "1001" Or Format(Date, "mmdd") < "0501" Then
        timeZone = CDbl(nZone + 1) / 24
    Else
        timeZone = CDbl(nZone) / 24
    End If
End Function
В запросе использовать с соответствующим номером часового пояса. В примере 3
SQL
1
SELECT Format(DateAdd("s",Clng([ПолеUnixВремени])+timeZone(3), #01/01/1970#), "dd.mm.yyyy hh:nn")
Если живете к западу от UTC, то параметр в timeZone отрицательный
1
Beginne_r
0 / 0 / 0
Регистрация: 07.12.2012
Сообщений: 41
11.07.2013, 17:53  [ТС] 7
Часы к сожалению переводят в последние ночи с субботы на воскресенье в марте и октябре вроде как и даты меняются, а у меня база с данными за несколько лет, получается только писать большую функцию для каждого года, чтобы что-то получить
0
mobile
Эксперт MS Access
22918 / 12994 / 2688
Регистрация: 28.04.2012
Сообщений: 14,228
11.07.2013, 21:36 8
Beginne_r, попробуйте функцию. Первый параметр, как и раньше, часовой пояс. Второй поле юникс-времени.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Public Function timeZone(nZone As Integer, dtUnix)
    Dim dMar, dOct, dt, nomd, lastVoskrMar, lastVoskrOct
    dt = CDbl(dtUnix) / 86400 + #1/1/1970# + CDbl(nZone) / 24
    dMar = DateSerial(Year(dt), 3, 31)
    dOct = DateSerial(Year(dt), 10, 31)
    
    nomd = Weekday(dMar, 2)
    lastVoskrMar = DateSerial(Year(dt), 3, 31) - nomd  'Последнее воскресенье марта
    nomd = Weekday(dOct, 2)
    lastVoskrOct = DateSerial(Year(dt), 10, 31) - nomd  'Последнее воскресенье октября
    
    If dt >= lastVoskrMar and dt < lastVoskrOct Then
        timeZone = dt
    Else
        timeZone = dt + 1 / 24
    End If
End Function
В запросе
SQL
1
SELECT Format(timeZone(3, [ПолеUnixВремени]), "dd.mm.yyyy hh:nn")
2
11.07.2013, 21:36
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.07.2013, 21:36

Перевод времени из секунд в обычное представление
Доброго времени суток.Столкнулся с проблемой перевода времени из секунд в...

Есть ли в VB или в ADO, DAO или RDO функция преобразования MS SQL типов данных в MS Access?
Существует ли встроенная функция перевода типов данных SQL в Access, Paradox,...

функция для преобразования __time64_t в char *
Добрый день! Нужна в\у функция а еще лучше пример с ней. Задача примерно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru