Not
Гость
|
|
« : 29-12-2009 19:46 » |
|
Получено время при помощи функций GetCurrentTime() или GetSystemTime() (какой именно не знаю) запомнено и записано несколько месяцев назад, возможно, больше года. Записано в «нечеловеческом» виде (например: 630153529). Необходимо получить время обратно в «человеческом» виде, т.е. дд.мм.гг. Испробовал много вариантов, безуспешно, время нереальное получается. Может, кто подскажет, как «победить» эту проблемку? Использую Visual C++ 2003.
Спасибо.
|
|
« Последнее редактирование: 30-12-2009 12:38 от Sel »
|
Записан
|
|
|
|
lapulya
Молодой специалист
Offline
|
|
« Ответ #1 : 30-12-2009 00:49 » |
|
|
|
|
Записан
|
С уважением Lapulya
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Online
Сообщений: 13
|
|
« Ответ #2 : 30-12-2009 03:59 » |
|
ну дык...
GetCurrentTime() - это я не знаю, откуда. Хотя, методы CTime, COleDataTime (может, ещё чего-то) , которые возвращают текущее время. CTime - float, COleDataTime - double
GetSystemTime() - возвращает структуру SYSTEMTIME, время по Гринвичу (The system time is expressed in Coordinated Universal Time (UTC).)
GetLocalTime() - возвращает структуру SYSTEMTIME, время локальное (которое в трее показано)
|
|
« Последнее редактирование: 30-12-2009 04:02 от Алексей1153++ »
|
Записан
|
|
|
|
lapulya
Молодой специалист
Offline
|
|
« Ответ #3 : 30-12-2009 08:49 » |
|
ну я так и сказал
|
|
|
Записан
|
С уважением Lapulya
|
|
|
darkelf
Молодой специалист
Offline
|
|
« Ответ #4 : 30-12-2009 08:58 » |
|
GetSystemTime() заполняет структуру, которая явно больше одного слова. Приведите значение времени, в принципе по значению можно будет попробовать догадаться.
|
|
« Последнее редактирование: 30-12-2009 09:02 от darkelf »
|
Записан
|
|
|
|
Sla
|
|
« Ответ #5 : 30-12-2009 09:47 » |
|
GetCurrentTime() - возвращает время от момента включения компьютера в микро(мили)секундах - не помню.
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Online
Сообщений: 13
|
|
« Ответ #6 : 30-12-2009 09:51 » |
|
Не, Слав, то, что ты сказал, это GetTickCount() - мс
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #7 : 30-12-2009 10:03 » |
|
Алексей1153++, вполне может быть, но я ж не с потолка взял CTime current = CTime::GetCurrentTime();
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Online
Сообщений: 13
|
|
« Ответ #8 : 30-12-2009 10:11 » |
|
CTime::GetCurrentTime(); - это аналог ::GetLocalTime
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #9 : 30-12-2009 10:21 » |
|
Алексей1153++, а че сложно проверить? GetLocalTime возвращает структуру, а GetCurrentTime - longint.
Может у вопрошающего свой GetCurrentTime?
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Online
Сообщений: 13
|
|
« Ответ #10 : 30-12-2009 10:30 » |
|
Алексей1153++, а че сложно проверить?
эээ... А что нужно проверить то ? ) Регулярно пользуюсь теми функциями и так. А вот "GetCurrentTime " в АПИ нет
|
|
|
Записан
|
|
|
|
Not
Гость
|
|
« Ответ #11 : 30-12-2009 11:02 » |
|
Спасибо. Я делал: 1-ый способ ……………………………………………………………… CTime time; time = l_data; sz_data = time.Format("%d/%m/%Y"); Получается sz_data == 20/12/1989 2-ой способ ………………………………… struct tm *newtime; newtime = gmtime( &l_data ); sz_data = _tasctime( newtime ); Получается sz_data == Wed Dec 20 10:38:49 1989 Это однозначно неверно, т.к. время должно быть или 2008г. или начало/середина 2009г. день и месяц не знаю. Время значения не имеет. Пытался разобраться с void GetLocalTime(LPSYSTEMTIME lpst); и void GetSystemTime(LPSYSTEMTIME lpst); LPSYSTEMTIME lpst; lpst = (LPSYSTEMTIME)malloc(sizeof(SYSTEMTIME)); Я так понимаю, далее надо как-то присвоить lpst = 630153529 … но не выходит. Ибо программист пока я «величайший» . Подскажите, пожалуйста, как подсунуть это значение ф-циям. Может переведет…
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Online
Сообщений: 13
|
|
« Ответ #12 : 30-12-2009 11:09 » |
|
Not, проблема в том, что SYSTEMTIME - это 16 байт, а 630153529 - 4 байта. Так что вряд ли. А ещё мог использоваться свой формат Записано в «нечеловеческом» виде (например: 630153529).
а где записано и как прочитано это число ? Кстати. Ещё интересна закономерность изменения чисел. Например, если известно, что между соседними числами - пара секунд или дней
|
|
« Последнее редактирование: 30-12-2009 11:10 от Алексей1153++ »
|
Записан
|
|
|
|
darkelf
Молодой специалист
Offline
|
|
« Ответ #13 : 30-12-2009 11:14 » |
|
SYSTEMTIME s; GetSystemTime(&s);
Но думаю Вам это не поможет, потому-как либо значение 630153529 это не все данные, либо, для случая GetTickCount() это определённая delta, от, времени запуска системы/программы, и соответственно по только этому значению время определить не удастся, не зная времени начала отсчёта delta-ы, плюс, как сказал Алексей1153++, не известна единица измерения.
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Online
Сообщений: 13
|
|
« Ответ #14 : 30-12-2009 11:16 » |
|
зато, если Not покажет часть лога с этими датами, можно попытаться интервалы меджу датами найти
|
|
|
Записан
|
|
|
|
lapulya
Молодой специалист
Offline
|
|
« Ответ #15 : 30-12-2009 20:31 » |
|
Ну все понятно, гадание на кофейной гуще...
|
|
|
Записан
|
С уважением Lapulya
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Online
Сообщений: 13
|
|
« Ответ #16 : 31-12-2009 02:56 » |
|
lapulya, а что, другие предложения есть ?
|
|
|
Записан
|
|
|
|
Not
Гость
|
|
« Ответ #17 : 31-12-2009 07:51 » |
|
Это число (630153529) получается при создании запроса на электр. цифров. подпись. Формируется контейнер закрытых ключей (на дискете). Название контейнера получается автоматически и состоит из имени пользователя и даты которая "зашита" в данном числе. И чтобы узнать когда формировался контейнер ее надо расшифровать. Что касается интервала между датами...пока не знаю, попробую узнать (сообщу позже).
|
|
|
Записан
|
|
|
|
Sel
Злобный
Администратор
Offline
|
|
« Ответ #18 : 31-12-2009 17:22 » |
|
lapulya, в последний раз повторяю: не флудим. Флуд удалила.
|
|
|
Записан
|
Слово не воробей. Всё не воробей, кроме воробья.
|
|
|
Not
Гость
|
|
« Ответ #19 : 07-01-2010 16:14 » |
|
Интервал узнать не удастся (причины наверно не интересны). Сорри.
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Online
Сообщений: 13
|
|
« Ответ #20 : 07-01-2010 16:15 » |
|
Not, интересны
|
|
|
Записан
|
|
|
|
Вад
|
|
« Ответ #21 : 07-01-2010 18:45 » |
|
Если число является значением хэш-функции от конкретного момента времени, то едва ли удастся что-то вот так просто восстановить.
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Online
Сообщений: 13
|
|
« Ответ #22 : 07-01-2010 19:00 » |
|
Так как раз и хотелось увидеть последовательные цифры
|
|
|
Записан
|
|
|
|
Антон (LogRus)
|
|
« Ответ #23 : 08-01-2010 17:09 » |
|
630153529 это действительно 89-год или это не то, что вы думаете или оно криво формируется
|
|
|
Записан
|
Странно всё это....
|
|
|
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #24 : 08-01-2010 21:33 » |
|
По стандарту, насколько я помню, все C/С++ функции работы со временем, входяшие в стандард. Должны считать время от Unix эры. Т.е. 1 января 1970 года. Насколько я знаю, отсчет времени IBM PC совместимых машин шел с 1981 года. Так что результат очень сильно будет зависеть от времени начала отсчета и способа отсчета.
|
|
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
Not
Гость
|
|
« Ответ #25 : 09-01-2010 15:21 » |
|
Not, интересны Дело в том, что к этой программе постоянно идут обновления. И когда я сам получил две даты, то оказалось что они нормально анализируются визуально. Видимо разработчики, это поправили (это моя версия). Присылать эти даты на форум небыло смысла. Но, интересны то, именно те, старые. Попробую что-нибудь сделать всеже...с присылкой старых дат для анализа (пришлю 11 янв. или попозже). P.S. То, что 630153529 это 89г. просто невозможно!!!
|
|
|
Записан
|
|
|
|
Not
Гость
|
|
« Ответ #26 : 11-01-2010 15:47 » |
|
Видимо я ошибался (хотя вроде все логично было) , визуально даты определить нельзя. Выкладываю для анализа две даты полученные сегодня: Дата: 111150942 15:15 11.01.2010 (её нормальный вид) Дата: 111164501 16:45 11.01.2010 (её нормальный вид)
|
|
« Последнее редактирование: 11-01-2010 15:49 от Not »
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Online
Сообщений: 13
|
|
« Ответ #27 : 11-01-2010 16:11 » |
|
елси отсчёт от 1981 , то (15:15 11.01.2010) в секундах == 915925140 елси отсчёт от 1970 , то (15:15 11.01.2010) в секундах == 1262963700
--------------- а разница (16:45 11.01.2010)-(15:15 11.01.2010)==90 минут (5400с) ,
111164501 -111150942 == 13559
опять не ладно -------------------------- не в секундах, значит, либо я что-то не учёл
|
|
« Последнее редактирование: 11-01-2010 16:25 от Алексей1153++ »
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Online
Сообщений: 13
|
|
« Ответ #28 : 11-01-2010 16:29 » |
|
о, кстати (1)(11)(15)(09)(42) 15:15 11.01.2010 (её нормальный вид) (1)(11)(16)(45)(01) 16:45 11.01.2010 (её нормальный вид) подозрительное совпадение Тогда 630153529 это было 30 июня 15:30 + 29 с А вот года немножко нет... Или он в другом поле записан
|
|
« Последнее редактирование: 11-01-2010 16:32 от Алексей1153++ »
|
Записан
|
|
|
|
Антон (LogRus)
|
|
« Ответ #29 : 12-01-2010 04:01 » |
|
какие изобретательные иногда программисты. почему нельзя просто написать, как делают многие 201001111645 или так 2010-01-11-16-45 или еще как-то
|
|
|
Записан
|
Странно всё это....
|
|
|
|