Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Андроид и Sqllite конвертация даты в нормальный вид  (Прочитано 25345 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Элексир
Помогающий

ru
Offline Offline
Пол: Мужской

« : 03-05-2011 10:42 » 

Добрый день уважаемые. Подскажите пожалуйта по такому вопросу На телефоне с Андроидом используется sqlite который хранит дату в виде "1297868604938". как мне вышенаписанное конвертнуть в нормальный вид? должно получиться вот типа этого: 16 февраля 2011 15:03
« Последнее редактирование: 03-05-2011 12:19 от McZim » Записан
McZim
Модератор

ru
Offline Offline
Пол: Мужской
Я странный


WWW
« Ответ #1 : 03-05-2011 12:19 » 

http://www.sqlite.org/cvstrac/wiki?p=DateAndTimeFunctions
Записан

The CBO without stats is like a morning without coffee. (c) T.Kyte.
Элексир
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 03-05-2011 12:44 » 

McZim, спасибо. Почитаю

Добавлено через 39 минут и 55 секунд:
Интересно а можно ли эту конвертацию вручную проделать? Так сказать "на тетрадном листе".
« Последнее редактирование: 03-05-2011 13:24 от Элексир » Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 03-05-2011 17:09 » 

SQLite не имеет типов данных для даты и времени. По этому однозначно интерпретировать данное число, не зная формата, нельзя. Можно только предполагать и экспериментально это проверять.
Судя по огромному числу, предположу, что это время unix, но в микросекундах.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Элексир
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 03-05-2011 18:02 » 

RXL, спасибо за ответ. кажется это не в микросекундах, попробовал так посчитать получается около полумесяца.
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 03-05-2011 19:00 » 

Это - "1297868604938" - месяц? Unix time отсчитывает от 1.01.1970 00:00:00

А, точно - не микросекунды - миллисекунды.

Анализ неизвестного требует фантазии. Попробуй и все получится.

Не получится - пиши Улыбаюсь
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Finch
Спокойный
Администратор

il
Offline 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
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #7 : 03-05-2011 22:41 » 

Сейчас скачал исходники. Внутри функций используется такая структура
Код: (C)
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
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #8 : 04-05-2011 04:01 » 

Вить, калькулятор то юлианский. Там точка отсчета 1721425 дней до Р.Х.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Элексир
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #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
Молодой специалист

no
Offline Offline

« Ответ #10 : 04-05-2011 11:20 » 

Судя по исходникам, если не ошибаюсь, это число дней, с 1970-того года, умноженное на 86400000, плюс, по всей видимости, миллисекунды в сутках.
Записан
Элексир
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #11 : 04-05-2011 11:36 » 

вроде похоже только мой результат слегка превышает аналог и это даже без времени.
Записан
darkelf
Молодой специалист

no
Offline 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
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #13 : 04-05-2011 12:41 » 

Вот-вот. Я же сразу сказал, что это unix time. Улыбаюсь
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
darkelf
Молодой специалист

no
Offline Offline

« Ответ #14 : 04-05-2011 12:51 » 

Вот-вот. Я же сразу сказал, что это unix time. Улыбаюсь
Разве-что помноженный на 1000.
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #15 : 04-05-2011 12:53 » 

Ну да Улыбаюсь
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
darkelf
Молодой специалист

no
Offline Offline

« Ответ #16 : 04-05-2011 13:03 » 

Ну да Улыбаюсь
В принципе, да - Вы угадали, только не в микросекундах, а в миллисекундах.
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #17 : 04-05-2011 13:41 » 

О чем чуть позже признался.


Собственно, для использования другой точки отсчета нужно существенное основание. Ведь с устаканившимся форматом проще работать.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
darkelf
Молодой специалист

no
Offline Offline

« Ответ #18 : 04-05-2011 13:57 » 

О чем чуть позже признался.
Прошу прощения, невнимательно читал.
Записан
Элексир
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #19 : 04-05-2011 17:58 » 

darkelf,а можно подробный алгоритм:
Код:
Переводим в читабельный вид: 04.05.2011 13:07:38.000000
Записан
darkelf
Молодой специалист

no
Offline Offline

« Ответ #20 : 05-05-2011 05:10 » 

darkelf,а можно подробный алгоритм:
Код:
Переводим в читабельный вид: 04.05.2011 13:07:38.000000
man localtime
man gmtime
В частности этот результат был получен при помощи gmtime()
Записан
Элексир
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #21 : 05-05-2011 07:49 » 

Так сказать "на тетрадном листе".
а есть ли правильный алгоритм для самостоятельного преобразования? я щас вручную это делаю. у меня получается 13.04.2011 13:07:38
Записан
darkelf
Молодой специалист

no
Offline Offline

« Ответ #22 : 05-05-2011 07:55 » 

Так сказать "на тетрадном листе".
а есть ли правильный алгоритм для самостоятельного преобразования? я щас вручную это делаю. у меня получается 13.04.2011 13:07:38

Прошу прощения, а чем Вас не устроила функция gmtime()? Её нет в Android?
Записан
Элексир
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #23 : 05-05-2011 08:59 » 

Прошу прощения, а чем Вас не устроила функция gmtime()? Её нет в Android?
хотелось бы самому это уметь знать Улыбаюсь
« Последнее редактирование: 05-05-2011 09:04 от Элексир » Записан
darkelf
Молодой специалист

no
Offline Offline

« Ответ #24 : 05-05-2011 09:14 » 

Тогда как вариант в интернете поищите её реализацию.
Записан
Элексир
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #25 : 05-05-2011 09:41 » new

darkelf, спасибо попробую.

Добавлено через 1 день, 59 минут и 1 секунду:
Всем, спасибо. Все получилось!!!
« Последнее редактирование: 06-05-2011 10:40 от Элексир » Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines