Форум программистов, компьютерный форум, киберфорум
Наши страницы

MS Access

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
Beginne_r
0 / 0 / 0
Регистрация: 07.12.2012
Сообщений: 41
#1

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

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

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

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

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

Функция VBA для сортировки данных в SQL запросе - MS Access
День добрый. Есть задача сортировки данных при выводе в список на форме. База в Аксессе. Написан запрос: SELECT...

Unix время конвертировалось в обычное - PHP
Нужно что бы xml документа unix время конвертировалось в обычное и выводилось, я нуб, помогите :С <? $uid = 164959633;...

SQL - Ошибка преобразования даты или времени из символьной строки - SQL Server
Имеется текст запроса, надо вывести на экран список товаров, поставленных поставщиком 1 (ЧП Иванов И.И.) в период с 05/09/1999 по...

Какой тип использовать для хранения метки времени UNIX в десятичном формате - MySQL
У меня следующая таблица: -- -- Структура таблицы `chat_msg` -- CREATE TABLE IF NOT EXISTS `chat_msg` ( `to` int(11)...

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

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

7
mobile
Эксперт MS Access
22449 / 12767 / 2596
Регистрация: 28.04.2012
Сообщений: 13,957
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
22449 / 12767 / 2596
Регистрация: 28.04.2012
Сообщений: 13,957
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
22449 / 12767 / 2596
Регистрация: 28.04.2012
Сообщений: 13,957
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
22449 / 12767 / 2596
Регистрация: 28.04.2012
Сообщений: 13,957
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")
1
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? - Visual Basic
Существует ли встроенная функция перевода типов данных SQL в Access, Paradox, Dbase и пр.?

функция для преобразования __time64_t в char * - C++
Добрый день! Нужна в\у функция а еще лучше пример с ней. Задача примерно выглядит так: дана структура __finddata64_t a; из &lt;io.h ...

Функция для преобразования double в строку символов. - C++
Написать функцию для преобразования переменной типа double в строку символов с заданной точностью представления ( dtoa( double num, int...

Есть ли функция PHP для преобразования ANSI в UTF-8 или Unicode и наоборот? - PHP БД
Здравствуйте. Я хочу программно ввести в базу данных MySql русский текст. Через PHP-admin сайтхостинга это получается, но на сайте он...


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

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

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