Что нового

[Время] UINT64 в читаемый вид.

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Есть строка logontime и равна она 129806164513068000 (видимо UINT64). Каким способом преобразовать ее в читаемый вид.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Код:
_TicksToTime

?
:scratch:

Хотя нет. Откуда берётся значение?
 
Автор
inververs

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Вот из этой структуры http://msdn.microsoft.com/en-us/library/windows/desktop/aa380128(v=vs.85).aspx
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
1298061645 - первая часть вот ее еще можно представить как дату и время и кстати вполне в разумных пределах она будет 19.02.11 00:40, но вот что за 13068000 (01.06.70 10:00) я понятия не имею
 
Автор
inververs

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Описание к ней: The time the session owner logged on.
Я так понимаю это время когда началась сессия пользователя, значит в этой строке должно быть как минимум сегодняшнее число.


Добавлено:
Сообщение автоматически объединено:

Очень возможно что тут может быть 04.05.2012 17:47:31
Но как рассшифровать...
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
Вот что пишут о таком времени:
TimerResolutionInMicroSeconds - The resolution of the hardware time. All time values in NT are specified as 64-bit LARGE_INTEGER values in units of 100 nanoseconds. This field allows an application to understand how many of the low order bits of a system time value are insignificant.

На C# или C++ куча примеров... Но там используются встроенные методы...
 
Автор
inververs

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Вот тут http://www.delphimaster.net/view/2-1285616407/all нашел пример на delphi, и там есть преобразование в читаемый вид. Не понятно как это сделать на autoit. В delphi не разбираюсь.. :( Там случайно не пользуются функциями, которые можно сделать через API?
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
Код:
#include <date.au3>
Global $HH, $M, $S
$t = Floor(129806164513068000/10000)
_TicksToTime($t, $HH, $M, $S)
$d = _DateAdd('H', $HH, '1601/01/01 03:00:00')
$d = _DateAdd('n', $M, $d)
$d = _DateAdd('s', $S, $d)
ConsoleWrite($d & @CRLF)



Добавлено:
Сообщение автоматически объединено:

код выше, это чисто чтобы оценили масштаб трагедии ;D
по простому это будет
Код:
#include <date.au3>
Global $HH, $M, $S
$t = Floor(129806164513068000/10000000)
$d = _DateAdd('s', $t, '1601/01/01 03:00:00')
ConsoleWrite($d & @CRLF)
 
Автор
inververs

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Kaster
Круто :smile: Я догадывался что это количество милисекунд от какой то даты.. но вот от какой не знал.
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
Kaster
1601/01/01 03:00:00 - почему именно эта дата и именно 3 часа ночи? :laugh:


Добавлено:
Сообщение автоматически объединено:

inververs [?]
не угадал. Это микросекунды =)
 
Автор
inververs

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Тут 3 часа это - часовой пояс?
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
Medic84 [?]
Это микросекунды =)
не угадал, это каждые 100 наносекунд :smile:
1601/01/01 03:00:00 - почему именно эта дата и именно 3 часа ночи?
спроси у мелкомягких :smile: в мире *nix - это 1970/01/01 00:00:00

inververs [?]
Тут 3 часа это - часовой пояс?
нет. просто время, выбранное в качестве начала отсчета
 
Автор
inververs

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
:smile: Осталось подождать того, кто скажет что это 1/1000 периода колебания атома цезия .. ну или что то в этом роде.

А по существу, всем спасибо, тему можно закрывать
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Это число представляет собой ни что иное, как FILETIME структуру. Следовательно, логичнее использовать функцию FileTimeToSystemTime() для получения потребных значений. Для перевода в локальное время (с учетом часового пояся) используй функцию FileTimeToLocalFileTime().
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
inververs [?]
Тут 3 часа это - часовой пояс?
я дурак. конечно это часовой пояс. просто начало отсчета это гринвич. то есть мужик к успеху шел они все правильно сделали.
 
Автор
inververs

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Yashied [?]
Это число представляет собой ни что иное, как FILETIME структуру

Спасибо, то что надо.
Кому будет интересно, logontime представляйте не ввиде UINT64, а двумя DWORD. Первый это LowDateTime, второй HighDateTime. Создавайте структуру $tagFILETIME и с помощью
Код:
_Date_Time_FileTimeToLocalFileTime
переводите в локальной время. В читаемом виде можно получить через
Код:
_Date_Time_FileTimeToStr
 
Верх