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

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1] 2  Все   Вниз
  Печать  
Автор Тема: Время при помощи функций GetCurrentTime() или GetSystemTime()  (Прочитано 46937 раз)
0 Пользователей и 5 Гостей смотрят эту тему.
Not
Гость
« : 29-12-2009 19:46 » 

Получено время при помощи функций GetCurrentTime() или GetSystemTime() (какой именно не знаю) запомнено и записано несколько месяцев назад, возможно, больше года. Записано в «нечеловеческом» виде (например: 630153529). Необходимо получить время обратно в «человеческом» виде, т.е. дд.мм.гг. Испробовал много вариантов, безуспешно, время нереальное получается. Может, кто подскажет, как «победить» эту проблемку?
Использую Visual C++ 2003.

Спасибо.
« Последнее редактирование: 30-12-2009 12:38 от Sel » Записан
lapulya
Молодой специалист

ru
Offline Offline

« Ответ #1 : 30-12-2009 00:49 » 

Тут все написано
http://msdn.microsoft.com/en-us/library/ms724338(VS.85).aspx
http://msdn.microsoft.com/en-us/library/ms724390(VS.85).aspx
http://msdn.microsoft.com/en-us/library/ms724950(VS.85).aspx

PS
что такое GetCurrentTime я не знаю, если это MFC может пушистый подскажет.
Записан

С уважением Lapulya
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #2 : 30-12-2009 03:59 » new

ну дык...

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

ru
Offline Offline

« Ответ #3 : 30-12-2009 08:49 » 

ну я так и сказал Улыбаюсь
Записан

С уважением Lapulya
darkelf
Молодой специалист

ua
Offline Offline

« Ответ #4 : 30-12-2009 08:58 » 

GetSystemTime() заполняет структуру, которая явно больше одного слова. Приведите значение времени, в принципе по значению можно будет попробовать догадаться.
« Последнее редактирование: 30-12-2009 09:02 от darkelf » Записан
Sla
Команда клуба

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

WWW
« Ответ #5 : 30-12-2009 09:47 » 

GetCurrentTime() - возвращает время от момента включения компьютера в микро(мили)секундах - не помню.
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #6 : 30-12-2009 09:51 » 

Не, Слав, то, что ты сказал, это GetTickCount() - мс
Записан

Sla
Команда клуба

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

WWW
« Ответ #7 : 30-12-2009 10:03 » 

Алексей1153++, вполне может быть,
но я ж не с потолка взял Улыбаюсь

CTime current = CTime::GetCurrentTime();
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #8 : 30-12-2009 10:11 » 

CTime::GetCurrentTime();  - это аналог ::GetLocalTime Улыбаюсь
Записан

Sla
Команда клуба

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

WWW
« Ответ #9 : 30-12-2009 10:21 » 

Алексей1153++, а че сложно проверить?
GetLocalTime возвращает структуру,
а GetCurrentTime - longint.

Может у вопрошающего свой GetCurrentTime?
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #10 : 30-12-2009 10:30 » 

Алексей1153++, а че сложно проверить?
эээ... А что нужно проверить то ? ) Регулярно пользуюсь теми функциями и так. А вот "GetCurrentTime " в АПИ нет
Записан

Not
Гость
« Ответ #11 : 30-12-2009 11:02 » 

Спасибо.

Я делал:
Код:
long l_data = 630153529;

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 … но не выходит. Ибо программист пока я «величайший» Улыбаюсь. Подскажите, пожалуйста, как подсунуть это значение ф-циям. Может переведет…
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #12 : 30-12-2009 11:09 » 

Not, проблема в том, что SYSTEMTIME - это 16 байт, а 630153529 - 4 байта. Так что вряд ли. А ещё мог использоваться свой формат



Цитата
Записано в «нечеловеческом» виде (например: 630153529).
а где записано и как прочитано это число ? Кстати.


Ещё интересна закономерность изменения чисел. Например, если известно, что между соседними числами - пара секунд или дней
« Последнее редактирование: 30-12-2009 11:10 от Алексей1153++ » Записан

darkelf
Молодой специалист

ua
Offline Offline

« Ответ #13 : 30-12-2009 11:14 » 

Код:
SYSTEMTIME s;
GetSystemTime(&s);

Но думаю Вам это не поможет, потому-как либо значение 630153529 это не все данные, либо, для случая GetTickCount() это определённая delta, от, времени запуска системы/программы, и соответственно по только этому значению время определить не удастся, не зная времени начала отсчёта delta-ы, плюс, как сказал Алексей1153++, не известна единица измерения.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #14 : 30-12-2009 11:16 » 

зато, если Not покажет часть лога с этими датами, можно попытаться интервалы меджу датами найти Улыбаюсь
Записан

lapulya
Молодой специалист

ru
Offline Offline

« Ответ #15 : 30-12-2009 20:31 » 

Ну все понятно, гадание на кофейной гуще...
Записан

С уважением Lapulya
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #16 : 31-12-2009 02:56 » 

lapulya, а что, другие предложения есть ? Улыбаюсь
Записан

Not
Гость
« Ответ #17 : 31-12-2009 07:51 » 

Это число (630153529) получается при создании запроса на электр. цифров. подпись. Формируется контейнер закрытых ключей (на дискете). Название контейнера получается автоматически и состоит из имени пользователя и даты которая "зашита" в данном числе. И чтобы узнать когда формировался контейнер ее надо расшифровать.
Что касается интервала между датами...пока не знаю, попробую узнать (сообщу позже).
Записан
Sel
Злобный
Администратор

ru
Offline Offline

« Ответ #18 : 31-12-2009 17:22 » 

lapulya, в последний раз повторяю: не флудим.
Флуд удалила.
Записан

Слово не воробей. Всё не воробей, кроме воробья.
Not
Гость
« Ответ #19 : 07-01-2010 16:14 » 

Интервал узнать не удастся (причины наверно не интересны). Сорри.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #20 : 07-01-2010 16:15 » 

Not, интересны Улыбаюсь
Записан

Вад
Модератор

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

« Ответ #21 : 07-01-2010 18:45 » 

Если число является значением хэш-функции от конкретного момента времени, то едва ли удастся что-то вот так просто восстановить.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #22 : 07-01-2010 19:00 » 

Так как раз и хотелось увидеть последовательные цифры
Записан

Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #23 : 08-01-2010 17:09 » 

630153529 это действительно 89-год
или это не то, что вы думаете
или оно криво формируется
Записан

Странно всё это....
Finch
Спокойный
Администратор

il
Offline 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 » Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 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++ » Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 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)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #29 : 12-01-2010 04:01 » 

какие изобретательные иногда программисты.
почему нельзя просто написать, как делают многие
201001111645
или так
2010-01-11-16-45
или еще как-то
Записан

Странно всё это....
Страниц: [1] 2  Все   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines