powered by simpleCommunicator - 2.0.38     © 2025 Programmizd 02
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Возможно ли прочитать дату и время из DOUBLE ?
21 сообщений из 21, страница 1 из 1
Возможно ли прочитать дату и время из DOUBLE ?
    #37713115
MinistrBob
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В таблице дата храниться в формате DOUBLE, например 40450.669306

попробовал выбрать так

Код: sql
1.
SELECT createdate,abs(createdate),datetime(abs(createdate)), FROM table1;
...
Рейтинг: 0 / 0
Возможно ли прочитать дату и время из DOUBLE ?
    #37713120
MinistrBob
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
пробовал выбрать как

Код: sql
1.
SELECT createdate,round(createdate),datetime(round(createdate)) FROM tasks;



какая-то ерунда получается,

"40450.669306","40451","-4602-08-25 12:00:00"

да и round наверное неправильно применять, он ведь округляет.

Возможно ли получить нормальную дату из DOUBLE?
...
Рейтинг: 0 / 0
Возможно ли прочитать дату и время из DOUBLE ?
    #37713171
metos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробуйте: strftime('%Y-%m-%d %H:%M:%S', createdate)
...
Рейтинг: 0 / 0
Возможно ли прочитать дату и время из DOUBLE ?
    #37713185
metos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Или так: datetime(round((createdate - 2440587.5)*86400.0))
...
Рейтинг: 0 / 0
Возможно ли прочитать дату и время из DOUBLE ?
    #37714638
RXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MinistrBob,

Надо внимательно читать документацию. Тип REAL (он же DOUBLE) в качестве даты интерпретируется как дни по юлианскому календарю (julian days), где дробная часть - время. А ваша дата задана в другой системе и отсчитывается от полуночи 1.01.1900.
...
Рейтинг: 0 / 0
Возможно ли прочитать дату и время из DOUBLE ?
    #37719498
MinistrBob
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Для 40450.669306

metosПопробуйте: strftime('%Y-%m-%d %H:%M:%S', createdate)

-460-08-25 04:03:48 - криво

metosИли так: datetime(round((createdate - 2440587.5)*86400.0))

1698789-19650109-20 -19:-12:-55 - тоже криво

RXLНадо внимательно читать документацию. Тип REAL (он же DOUBLE) в качестве даты интерпретируется как дни по юлианскому календарю (julian days), где дробная часть - время. А ваша дата задана в другой системе и отсчитывается от полуночи 1.01.1900.

У меня есть конкретная задача = к столбцу с датами нужно прибавить 1 год. Я специалист в Oracle. Sqllite я вообще вижу в первый раз. Изучать его именно для выполнения одной конкретной задачи, у меня нет ни времени ни желания. Из документации прочитал только про Date And Time Functions и попробовал сделать выборки так как там написано - ничего не получилось. Поэтому и прошу помощи на форуме.

Вы не могли бы привести конкретный пример как сделать нормальную выборку для дат котороые отсчитываются от полуночи 1.01.1900?
...
Рейтинг: 0 / 0
Возможно ли прочитать дату и время из DOUBLE ?
    #37719574
RXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MinistrBob,

Вам выше уже приводили формулу.
Юлианский календарь отличается от григорианского на величину "2440587.5" дней. Про вашу дату я уже писал выше. Найти нужное смещение элементарно:

Код: sql
1.
2.
sqlite> select julianday(datetime('1900-01-01 00:00:00'));
2415020.5



Получаются две формулы:

Код: plaintext
1.
2.
julian_day = your_date + 2415020.5;
your_date = julian_day - 2415020.5;





А насчет "некогда" вы зря. Получается, что остальным есть когда читать документацию и по SQLite, и по Oracle, и по куче других вещей, а вам некогда прочесть одну (!) страницу: http://sqlite.org/lang_datefunc.html
...
Рейтинг: 0 / 0
Возможно ли прочитать дату и время из DOUBLE ?
    #37719641
metos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
datetime(round(createdate*86400 - 2209161600))
86400 - количество секунд в дне
2209161600 = 25569 дней - разница между julian и unix time
...
Рейтинг: 0 / 0
Возможно ли прочитать дату и время из DOUBLE ?
    #37720010
MinistrBob
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
metosdatetime(round(createdate*86400 - 2209161600))
86400 - количество секунд в дне
2209161600 = 25569 дней - разница между julian и unix time

не пойдет, т.к. для 40450.669306 возвращает 3515623-42107381-19 12:00:00
...
Рейтинг: 0 / 0
Возможно ли прочитать дату и время из DOUBLE ?
    #37720261
metos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так
datetime(createdate*86400 - 2209161600, 'unixepoch')
или так
datetime(createdate + 2415018.5)
...
Рейтинг: 0 / 0
Возможно ли прочитать дату и время из DOUBLE ?
    #37720705
скукотища
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> MinistrBob
> В таблице дата храниться в формате DOUBLE, например 40450.669306

> У меня есть конкретная задача = к столбцу с датами нужно прибавить 1 год. Я специалист в Oracle.

Спец, выясни, каким преобразованием привели дату к формату DOUBLE, напиши функцию обратного преобразования, и НЕ НУДИ в пятницу...
...
Рейтинг: 0 / 0
Возможно ли прочитать дату и время из DOUBLE ?
    #37721298
RXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
скукотища,

Товарищ видимо думает, что в SQLite должен быть сервис, подобный Oracle. Так вот: практически весь сервис в SQLite стоится на базе самого приложения.
...
Рейтинг: 0 / 0
Возможно ли прочитать дату и время из DOUBLE ?
    #37722596
MinistrBob
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
RXLВам выше уже приводили формулу.
Юлианский календарь отличается от григорианского на величину "2440587.5" дней. Про вашу дату я уже писал выше. Найти нужное смещение элементарно:


К сожалению все вышеприведенные формулы возвращали неверный результат (я показал на примерах)

RXLА насчет "некогда" вы зря. Получается, что остальным есть когда читать документацию и по SQLite, и по Oracle, и по куче других вещей, а вам некогда прочесть одну (!) страницу: http://sqlite.org/lang_datefunc.html


Ну это вы зря, почитайте мой предыдущий пост внимательно. Именно эту то главу документации я как раз и почитал, но там нет конкретных формул для 01.01.1900 и 2415020.5. Там только есть один пример

Код: sql
1.
2.
Compute the time since the unix epoch in seconds (like strftime('%s','now') except includes fractional part):
 SELECT (julianday('now') - 2440587.5)*86400.0;


я его тоже пробовал, для 40450.669306 он возвращает лажу - 1698789-19650109-20 -19:-12:-55

скукотища> MinistrBob
> В таблице дата храниться в формате DOUBLE, например 40450.669306

> У меня есть конкретная задача = к столбцу с датами нужно прибавить 1 год. Я специалист в Oracle.

Спец, выясни, каким преобразованием привели дату к формату DOUBLE, напиши функцию обратного преобразования, и НЕ НУДИ в пятницу...

Очень удобно прикрыться анонимным ником и поучать других не боясь при этом получить в рыло...
Если бы я мог, я бы выяснил что там за преобразование, но у меня нет исходных текстов приложения которое пишет в базу.

RXLскукотища,

Товарищ видимо думает, что в SQLite должен быть сервис, подобный Oracle. Так вот: практически весь сервис в SQLite стоится на базе самого приложения.

Я не понял о каком сервисе в Oracle вы говорите. Только если вы не хотите помогать конкретным советом, зачем засорять форум непонятными высказываниями.

metosТак
datetime(createdate*86400 - 2209161600, 'unixepoch')
или так
datetime(createdate + 2415018.5)

Вот спасибо metos , вот это действительно помощь а не болтовня, оба варианта возвращают один и тот же человеческий результат (40450.669306 => 2010-09-29 16:03:48)
...
Рейтинг: 0 / 0
Возможно ли прочитать дату и время из DOUBLE ?
    #37723628
скукотища
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> MinistrBob
> Очень удобно прикрыться анонимным ником и поучать других не боясь при этом получить в рыло...
Лупи по так, - я поймаю.

> Если бы я мог, я бы выяснил что там за преобразование, но у меня нет исходных текстов приложения которое пишет в базу.
Специалист ничего не слашал про Microsoft Visual Basic и про тамошний формат даты ?
...
Рейтинг: 0 / 0
Возможно ли прочитать дату и время из DOUBLE ?
    #37724335
RXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
скукотищаСпециалист ничего не слашал про Microsoft Visual Basic и про тамошний формат даты ?
Аналогичный формат встречается и в других средах. Например, продукты Borland их используют.
...
Рейтинг: 0 / 0
Возможно ли прочитать дату и время из DOUBLE ?
    #37729189
Alexbootch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MinistrBob
Возможно ли получить нормальную дату из DOUBLE?

Возможно. Справки надо читать. Тип TDateTime содержит значение даты и времени. Она сохраняется как переменная Double, с датой как целая часть, а время как дробная. Дата сохраняется как число дней с 30 декабря 1899. Пример:

Код: sql
1.
SELECT datetime('1899-12-30 00:00:00', '+40450.669306  day');
...
Рейтинг: 0 / 0
Возможно ли прочитать дату и время из DOUBLE ?
    #37729459
Alexbootch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MinistrBobУ меня есть конкретная задача = к столбцу с датами нужно прибавить 1 год.

На вскидку как-то так будет:

Код: sql
1.
SELECT round((julianday(datetime('1899-12-30 00:00:00', '+40450.669306  day', '+1 years')) -julianday('1899-12-30 00:00:00')), 6);



вместо '+40450.669306 day' ставите нужные данные из таблицы
...
Рейтинг: 0 / 0
Возможно ли прочитать дату и время из DOUBLE ?
    #37729758
MinistrBob
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AlexbootchMinistrBobВозможно ли получить нормальную дату из DOUBLE?

Возможно. Справки надо читать. Тип TDateTime содержит значение даты и времени. Она сохраняется как переменная Double, с датой как целая часть, а время как дробная. Дата сохраняется как число дней с 30 декабря 1899. Пример:

Код: sql
1.
SELECT datetime('1899-12-30 00:00:00', '+40450.669306  day');



Чего-то я не врубился. А в sqlite есть тип TDateTime ??? Вот статья документации Datatypes In SQLite Version 3 - чего-то я там такого типа не вижу.

Вы вообще тему читали? Вы пишете что "Дата сохраняется как число дней с 30 декабря 1899", другие пишут что дата отсчитывается от полуночи 1.01.1900.

Ваш запрос
SELECT round((julianday(datetime('1899-12-30 00:00:00', '+40450.669306 day', '+1 years')) -julianday('1899-12-30 00:00:00')), 6);
возвращает
40815.669306
это
SELECT datetime(40815.669306);
-4601-08-25 04:03:48
не похоже на корректный результат
...
Рейтинг: 0 / 0
Возможно ли прочитать дату и время из DOUBLE ?
    #37729858
Alexbootch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MinistrBobЧего-то я не врубился. А в sqlite есть тип TDateTime ??? Вот статья документации Datatypes In SQLite Version 3 - чего-то я там такого типа не вижу.

Нету SQLite такого типа. Справка из Delphi.
...
Рейтинг: 0 / 0
Возможно ли прочитать дату и время из DOUBLE ?
    #37729867
Alexbootch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MinistrBob
Ваш запрос
SELECT round((julianday(datetime('1899-12-30 00:00:00', '+40450.669306 day', '+1 years')) -julianday('1899-12-30 00:00:00')), 6);
возвращает
40815.669306
это
SELECT datetime(40815.669306);
-4601-08-25 04:03:48
не похоже на корректный результат

Это вообще что такое за бред:
SELECT datetime(40815.669306);
-4601-08-25 04:03:48
Чего вы тут хотите получить?

Мой запрос корректно работает, к вашей дате 40450.669306 прибавляет один год и получается 40815.669306 в нужном вами формате.
...
Рейтинг: 0 / 0
Возможно ли прочитать дату и время из DOUBLE ?
    #37729876
Alexbootch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можете проверить

Код: sql
1.
SELECT datetime('1899-12-30 00:00:00', '+40450.669306  day');



2010-09-29 16:03:48

Код: sql
1.
SELECT datetime('1899-12-30 00:00:00', '+40815.669306  day');



2011-09-29 16:03:48
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Возможно ли прочитать дату и время из DOUBLE ?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]