Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.12.05;
Скачать: [xml.tar.bz2];

Вниз

Преобразование времени   Найти похожие ветки 

 
Ученик   (2004-11-17 15:08) [0]

Уважаемые мастера, не подскажете ли, как можно преобразовать время, представленное в формате (для примера: 946972800, 1098547200, ...), в нормальное представление???
Шеф дал указание разобраться с представлением данных в таблице, формируемой Info Matic"ом... "просит" срочно :(


 
S.P.V   (2004-11-17 15:16) [1]

FormatDateTime( "The meeting is on  dddd, mmmm d, yyyy,  at  hh:mm AM/PM", 64534545);

Читай Help FormatDateTime


 
Ega23 ©   (2004-11-17 15:16) [2]

А хрен его знает.
Стандартный DateTime в винде - количество дней, прошедших с 01.01.1900 (целая часть) + дробная часть - часы, минуты, секунды и сколько-то милисекунд.
AFAIK, в юниксах - то же самое, но начальная дата - запуск первого юникса, что-то типа 1969-го года.
Что это в сторонней программе может быть - только разработчик знает. Может число часов с начала Бородинского сражения. Или кол-во секунд с полёта Гагарина. Или вообще битовая шкала какая-нибудь...


 
Ученик   (2004-11-17 16:19) [3]

Кажется, я понял закономерность: время в таблице изменяется с интервалом в 10 мин (600 сек), т.е.
1098224400
1098225000
1098225600
...
Выходит, время измеряется в секундах.
Как удалось выяснить начальная дата записи: 23.10.2004.
Теперь вопрос в том, как перевести эту дату (точку отсчета?) в секунды :(
Если есть идеи, буду ОЧЕНЬ благодарен


 
Ученик   (2004-11-17 16:25) [4]

Да, и еще: есть предположение, что полный формат записи:
День (нумерация с 0) Неделя (0-1, 1-2, ...) чч:мм
То есть 23.10.2004 предстает в виде:
День 0 Неделя 0-1 00:00


 
Digitman ©   (2004-11-17 16:40) [5]

unix"ая "эпоха", кажись, начинается с 1.1.1970
тек.дата в этой эпохе во многих представлениях выражается как кол-во секунд. прошедших с начала этой "эпохи"

дурь, но - факт.


 
Digitman ©   (2004-11-17 16:44) [6]

Access под рукой ?

жмай там CTRL-G и вводи

?cdate(cdbl("1098224400") + cdbl(cdate("1.1.1970")))

если получишь дату, похожую на правду, то предположение о Юниксовом эпоховом формате подтверждается


 
Ученик   (2004-11-17 16:45) [7]

Я под Виндой сижу, да и прога под нее разработана.
А предложений никаких?


 
Digitman ©   (2004-11-17 16:49) [8]


> Ученик   (17.11.04 16:45) [7]
> под Виндой сижу, да и прога под нее разработана.


под "Виндой" запросто могут работать, например, и допотопные ДОС-задачи, слепленные на Фоксе .. и использующие как раз юниксовый отсчет времени.. это факт


 
Ученик   (2004-11-17 17:01) [9]

Пишет:
Overflow
:(((


 
Rocket ©   (2004-11-17 17:03) [10]

Да вы чё? Я уже на калькуляторе посчитал - примерно то 34,8 лет.
Чем не юникс? :)


 
Rocket ©   (2004-11-17 17:05) [11]

Вот только функцию бы написать, чтоб не пересчитывать :)


 
Digitman ©   (2004-11-17 17:07) [12]


> Ученик   (17.11.04 17:01) [9]


пардон .. идиотское переполнение действительно имеет место быть ...

подели сначала 1098224400 на 3600*24 и уже результат в виде строки подставляй в [6] вместо "1098224400"


 
cae ©   (2004-11-17 17:08) [13]

Попробуй ф-ю UnixToDateTime из модуля DateUtils


 
begin...end ©   (2004-11-17 17:08) [14]


> [11] Rocket ©   (17.11.04 17:05)

ShowMessage(DateToStr(StrToDate("1.1.1970") + 1098224400 / (60 * 60 * 24)))


 
Digitman ©   (2004-11-17 17:10) [15]


> Ученик


?cdate(1098224400/3600/24  + cdbl(cdate("1.1.1970")))
19.10.2004 22:20:00


 
Rocket ©   (2004-11-17 17:16) [16]

> [14] begin...end

А как же со временем быть?

Ды я имел ввиду как раз UnixToDateTime, что порекомендовал cae.


 
Rocket ©   (2004-11-17 17:19) [17]

http://www.delphifaq.com/fq/q1070.shtml


 
begin...end ©   (2004-11-17 17:20) [18]


> [16] Rocket ©   (17.11.04 17:16)


> А как же со временем быть?

Ну тогда DateTimeToStr вместо DateToStr.

Тот же результат получится и при использовании UnixToDateTime.


 
Rocket ©   (2004-11-17 17:22) [19]

begin...end
cae

Ну в любом случае спасибо вам обоим.


 
Rocket ©   (2004-11-17 21:32) [20]

Прикиньте, у меня оказывается другой форматец! Тема не закрыта!

Вот, что я имею:

546cc160 (1416413536) - 23:22 17.11.2004
7813f450 (2014573648) - 23:23 17.11.2004

разница
23A732F0 (598160112) - 1 минута (примерно, подозреваю, что основано далеко не на секундах)

Расшифруйте плиз. Сам уже ничё не соображаю :) 4 байта! Как такое возможно?!

Подсказка: Этот формат использует NOD32 для функции Schedule.


 
Defunct ©   (2004-11-17 21:46) [21]

> Теперь вопрос в том, как перевести эту дату (точку отсчета?) в секунды

Пересчитывать что?
Дата и так представлена в секундах.

Вы запутались в трех соснах?


 
Ученик   (2004-11-18 08:04) [22]

Огромное спасибо всем за помощь, особенно Digitman и begin...end, его алгоритм [14] очень помог, с исправлением на DateTimeToStr.


 
Ученик   (2004-11-18 08:20) [23]

Кстати, а как можно перевести переменную типа TDateTime в строку. Т.е. указываем дату 10.10.04, а получаем что-то вроде 123456?


 
Rocket ©   (2004-11-18 08:56) [24]

Так по поводу моего вопроса догадки есть?


 
begin...end ©   (2004-11-18 09:09) [25]


> [20] Rocket ©   (17.11.04 21:32)

Ну если 598160112 - это примерно 1 минута, то 1 - это 1 микросекунда :-)))


 
Rocket ©   (2004-11-18 09:51) [26]


> Ну если 598160112 - это примерно 1 минута, то 1 - это 1
> микросекунда :-)))


Это как? 58,816,011,2? :) И потом - в этих 4 байтах вкключено ВСЁ (и дата и время). Так что, думаю, здесь что-то послежнее. Вот только что?


 
begin...end ©   (2004-11-18 10:04) [27]


> [26] Rocket ©   (18.11.04 09:51)

Я ошибся, это так: 598160112 / 60 / 1000000 = 9,9693352 ~ 10 мкс.
Тогда точка отсчёта - это 23:22 17.11.2004 минус 236 минут :)


 
Anatoly Podgoretsky ©   (2004-11-18 10:47) [28]

Только не микросекунда, а 100 нс, а это уже системный интервал, например QyeryPerformanceCounter.


 
Anatoly Podgoretsky ©   (2004-11-18 10:51) [29]

Rocket ©   (17.11.04 21:32) [20]
Ищи еще 4 байта, они сразу за этими.


 
app ©   (2004-11-18 10:52) [30]

И вообще не красиво задавать свои вопросы в чужой ветке и как оказалось совсем про другое, заведи свою.


 
Rocket ©   (2004-11-18 10:54) [31]

А причём здесь QyeryPerformanceCounter?
Не понял. Прикол в том, что в этом Integer хранится дата+время.
Как такое возможно при том, что 598160112 ~ 10 мкс?
Всё же будет повторяться через какое-то (не большое) время.
Как они дату различают?
Timestamp всегда определяется правильно. Уже полгода :)


 
Rocket ©   (2004-11-18 11:07) [32]


> app ©   (18.11.04 10:52) [30]
> И вообще не красиво задавать свои вопросы в чужой ветке
> и как оказалось совсем про другое, заведи свою.

Почему про другое?! Тема "Преобразование времени". Что не так?


> Anatoly Podgoretsky ©   (18.11.04 10:51) [29]
> Rocket ©   (17.11.04 21:32) [20]
> Ищи еще 4 байта, они сразу за этими.

Нифига, запись находится в реестре, значение DWORD. И всё!


 
begin...end ©   (2004-11-18 11:38) [33]


> [27] begin...end ©   (18.11.04 10:04)

Блин, чего-то со мной сегодня не то; вроде и не пил; я опять ошибся, спасибо [28] Anatoly Podgoretsky ©   (18.11.04 10:47), не в одной единице 10 микросекунд, а в 10 единицах 1 микросекунда; тогда в одной единице будет 0,1 мкс = 100 нс.


 
Rocket ©   (2004-11-18 11:45) [34]

Получается совсем не то.
При таких расчётах 1416413536 ~ 142 секунды :)
Это с чего отсчитывать?


 
Rocket ©   (2004-11-19 13:23) [35]

Удалено модератором
Примечание: Создание пустых сообщений


 
Anatoly Podgoretsky ©   (2004-11-19 13:48) [36]

Rocket ©   (18.11.04 11:07) [32]
Такое не ислючено, что для целей задачи достаточно только младшей части. Анализ показывает, что единица измерения 100 нс.


 
Rocket ©   (2004-11-19 13:54) [37]

Надо основываться на том, что после преобразования по предпологаемому методу число 1416413536 + какая-то дата должно равняться примерно 23:22 17.11.2004.
Вот я уже и начинаю думать, что куда переставлять. Может там вообще в биты смотреть надо?


 
Anatoly Podgoretsky ©   (2004-11-19 13:57) [38]

А может проще, может ты недостаточно данных представил для анализа, как думаешь можно точно определить формат имея только два значения?


 
Rocket ©   (2004-11-19 14:01) [39]

Говорите, что надо. Предоставлю всё.
Смогу сделать это после 20:00 по Москве (как домой приду).


 
Anatoly Podgoretsky ©   (2004-11-19 15:07) [40]

Что надо сказано выше, не два значения, а по крайней мере три и желательно с интевалами в одну секунду, в одну минуту



Страницы: 1 2 вся ветка

Форум: "Основная";
Текущий архив: 2004.12.05;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.54 MB
Время: 0.046 c
4-1098426028
andrey77
2004-10-22 10:20
2004.12.05
Помогите пожалуйста! (WinAPI)


14-1099305727
Юрий Федоров
2004-11-01 13:42
2004.12.05
Вакансия в москве


1-1101109369
Chery
2004-11-22 10:42
2004.12.05
Не работают функции на сервере при Borland Socket - служба.


1-1101324267
BuG
2004-11-24 22:24
2004.12.05
TEdit и TWebBrowser


3-1099568570
SergP
2004-11-04 14:42
2004.12.05
DBGRID. Узнать State для остальных ячеек строки в DrawColumnCell





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский