Элексир
|
|
« : 03-05-2011 10:42 » |
|
Добрый день уважаемые. Подскажите пожалуйта по такому вопросу На телефоне с Андроидом используется sqlite который хранит дату в виде "1297868604938". как мне вышенаписанное конвертнуть в нормальный вид? должно получиться вот типа этого: 16 февраля 2011 15:03
|
|
« Последнее редактирование: 03-05-2011 12:19 от McZim »
|
Записан
|
|
|
|
McZim
|
|
« Ответ #1 : 03-05-2011 12:19 » |
|
|
|
|
Записан
|
The CBO without stats is like a morning without coffee. (c) T.Kyte.
|
|
|
Элексир
|
|
« Ответ #2 : 03-05-2011 12:44 » |
|
McZim, спасибо. Почитаю
Добавлено через 39 минут и 55 секунд: Интересно а можно ли эту конвертацию вручную проделать? Так сказать "на тетрадном листе".
|
|
« Последнее редактирование: 03-05-2011 13:24 от Элексир »
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #3 : 03-05-2011 17:09 » |
|
SQLite не имеет типов данных для даты и времени. По этому однозначно интерпретировать данное число, не зная формата, нельзя. Можно только предполагать и экспериментально это проверять. Судя по огромному числу, предположу, что это время unix, но в микросекундах.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Элексир
|
|
« Ответ #4 : 03-05-2011 18:02 » |
|
RXL, спасибо за ответ. кажется это не в микросекундах, попробовал так посчитать получается около полумесяца.
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #5 : 03-05-2011 19:00 » |
|
Это - "1297868604938" - месяц? Unix time отсчитывает от 1.01.1970 00:00:00 А, точно - не микросекунды - миллисекунды. Анализ неизвестного требует фантазии. Попробуй и все получится. Не получится - пиши
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #6 : 03-05-2011 21:58 » |
|
Ром у них в хелпе проскальзывало число 12:00 24 ноября 4714 до рождества Христово GMT+0 по Григорианскому стилю. Я так думаю, что это и есть базис для подсчетов Добавлено через 22 минуты и 33 секунды:PS. Примерно подсчитал, не получается Вот этот калькулятор http://www.imcce.fr/en/grandpublic/temps/jour_julien.php говорит что прошло от Юлианской даты 2455609.127083333 дней. Добавлено через 3 минуты и 8 секунд:Элексир, Приведи несколько чисел, с разницей скажем 1-5 секунд, тогда будет примерно понятно, какое основание берется для расчета.
|
|
« Последнее редактирование: 03-05-2011 22:25 от Finch »
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #7 : 03-05-2011 22:41 » |
|
Сейчас скачал исходники. Внутри функций используется такая структура typedef struct DateTime DateTime; struct DateTime { double rJD; /* The julian day number */ int Y, M, D; /* Year, month, and day */ int h, m; /* Hour and minutes */ int tz; /* Timezone offset in minutes */ double s; /* Seconds */ char validYMD; /* True if Y,M,D are valid */ char validHMS; /* True if h,m,s are valid */ char validJD; /* True if rJD is valid */ char validTZ; /* True if tz is valid */ }; Т.е. базис должен быть все таки в секундах. Хотя для секунд применяется тип double.
|
|
« Последнее редактирование: 03-05-2011 23:01 от Finch »
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #8 : 04-05-2011 04:01 » |
|
Вить, калькулятор то юлианский. Там точка отсчета 1721425 дней до Р.Х.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Элексир
|
|
« Ответ #9 : 04-05-2011 09:15 » |
|
1304514324280 - 04.05.2011 13:05 1304514336657 - 04.05.2011 13:05 1304514407849 - 04.05.2011 13:06 1304514423152 - 04.05.2011 13:07 1304514450575 - 04.05.2011 13:07 1304514458073 - 04.05.2011 13:07 Finch, до секунды не могу андроид только до минут показывает
|
|
|
Записан
|
|
|
|
darkelf
Молодой специалист
Offline
|
|
« Ответ #10 : 04-05-2011 11:20 » |
|
Судя по исходникам, если не ошибаюсь, это число дней, с 1970-того года, умноженное на 86400000, плюс, по всей видимости, миллисекунды в сутках.
|
|
|
Записан
|
|
|
|
Элексир
|
|
« Ответ #11 : 04-05-2011 11:36 » |
|
вроде похоже только мой результат слегка превышает аналог и это даже без времени.
|
|
|
Записан
|
|
|
|
darkelf
Молодой специалист
Offline
|
|
« Ответ #12 : 04-05-2011 12:19 » |
|
Странно, у меня всё совпало: 1304514458073/86400000=15098,5469684375, умножаем результат на 24*60*60 для получения секунд 15098,5469684375*24*60*60=1304514458,073. Переводим в читабельный вид: 04.05.2011 13:07:38.000000
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #13 : 04-05-2011 12:41 » |
|
Вот-вот. Я же сразу сказал, что это unix time.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
darkelf
Молодой специалист
Offline
|
|
« Ответ #14 : 04-05-2011 12:51 » |
|
Вот-вот. Я же сразу сказал, что это unix time. Разве-что помноженный на 1000.
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #15 : 04-05-2011 12:53 » |
|
Ну да
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
darkelf
Молодой специалист
Offline
|
|
« Ответ #16 : 04-05-2011 13:03 » |
|
Ну да В принципе, да - Вы угадали, только не в микросекундах, а в миллисекундах.
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #17 : 04-05-2011 13:41 » |
|
О чем чуть позже признался.
Собственно, для использования другой точки отсчета нужно существенное основание. Ведь с устаканившимся форматом проще работать.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
darkelf
Молодой специалист
Offline
|
|
« Ответ #18 : 04-05-2011 13:57 » |
|
О чем чуть позже признался.
Прошу прощения, невнимательно читал.
|
|
|
Записан
|
|
|
|
Элексир
|
|
« Ответ #19 : 04-05-2011 17:58 » |
|
darkelf,а можно подробный алгоритм: Переводим в читабельный вид: 04.05.2011 13:07:38.000000
|
|
|
Записан
|
|
|
|
darkelf
Молодой специалист
Offline
|
|
« Ответ #20 : 05-05-2011 05:10 » |
|
darkelf,а можно подробный алгоритм: Переводим в читабельный вид: 04.05.2011 13:07:38.000000
man localtime man gmtime В частности этот результат был получен при помощи gmtime()
|
|
|
Записан
|
|
|
|
Элексир
|
|
« Ответ #21 : 05-05-2011 07:49 » |
|
Так сказать "на тетрадном листе".
а есть ли правильный алгоритм для самостоятельного преобразования? я щас вручную это делаю. у меня получается 13.04.2011 13:07:38
|
|
|
Записан
|
|
|
|
darkelf
Молодой специалист
Offline
|
|
« Ответ #22 : 05-05-2011 07:55 » |
|
Так сказать "на тетрадном листе".
а есть ли правильный алгоритм для самостоятельного преобразования? я щас вручную это делаю. у меня получается 13.04.2011 13:07:38 Прошу прощения, а чем Вас не устроила функция gmtime()? Её нет в Android?
|
|
|
Записан
|
|
|
|
Элексир
|
|
« Ответ #23 : 05-05-2011 08:59 » |
|
Прошу прощения, а чем Вас не устроила функция gmtime()? Её нет в Android?
хотелось бы самому это уметь знать
|
|
« Последнее редактирование: 05-05-2011 09:04 от Элексир »
|
Записан
|
|
|
|
darkelf
Молодой специалист
Offline
|
|
« Ответ #24 : 05-05-2011 09:14 » |
|
Тогда как вариант в интернете поищите её реализацию.
|
|
|
Записан
|
|
|
|
Элексир
|
|
« Ответ #25 : 05-05-2011 09:41 » |
|
darkelf, спасибо попробую.
Добавлено через 1 день, 59 минут и 1 секунду: Всем, спасибо. Все получилось!!!
|
|
« Последнее редактирование: 06-05-2011 10:40 от Элексир »
|
Записан
|
|
|
|
|