Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.12.05;
Скачать: CL | DM;

Вниз

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

 
Ученик   (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;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.05 c
14-1100750611
alienserg
2004-11-18 07:03
2004.12.05
помогите потестировать мессенджер...


14-1100792286
_Dragon
2004-11-18 18:38
2004.12.05
курсач


1-1101107514
Гость
2004-11-22 10:11
2004.12.05
Подскажите как использовать rsync


14-1100797528
Sanek_Metaller
2004-11-18 20:05
2004.12.05
Задачка


1-1100942677
Magic_STI
2004-11-20 12:24
2004.12.05
Перевод HTML в RTF