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

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Андроид и Sqllite конвертация даты в нормальный вид  (Прочитано 25568 раз)
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 » new

Вить, калькулятор то юлианский. Там точка отсчета 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
Молодой специалист

ua
Offline Offline

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

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

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

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

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

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

ua
Offline Offline

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

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

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

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

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

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

ua
Offline Offline

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

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

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

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

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


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

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

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

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

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

ua
Offline Offline

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

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

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

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

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

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

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines