Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
|
ZwQuerySystemTime 27.05.03 10:17 Число просмотров: 1807
Автор: cb <cb> Статус: Member
|
> А тут я не понимаю что с этими интервалами по 100 нс > делать? > > ZwQuerySystemTime(OUT PLARGE_INTEGER CurrentTime); > > CurrentTime > Points to a variable that receives the current time of day > in the standard time format > (that is, the number of 100-nanosecond intervals since > January 1, 1601)
помоему тут все доступно изложено:
это количество 100-наносекундных интервалов прошедших с January 1, 1601.
время естественно в UTC. какие проблемы то?
может математику стоит подучить?
cb.
|
<operating systems>
|
ZwQuerySystemTime 27.05.03 08:16
Автор: ?? Статус: Незарегистрированный пользователь
|
В книге Нэббета сказано что эта функция возвращает текущее время в стандартном формате
Что это за формат?
С функцией GetSystemTime все просто и понятно
А тут я не понимаю что с этими интервалами по 100 нс делать?
ZwQuerySystemTime(OUT PLARGE_INTEGER CurrentTime);
CurrentTime
Points to a variable that receives the current time of day in the standard time format
(that is, the number of 100-nanosecond intervals since January 1, 1601)
|
|
ZwQuerySystemTime 27.05.03 10:17
Автор: cb <cb> Статус: Member
|
> А тут я не понимаю что с этими интервалами по 100 нс > делать? > > ZwQuerySystemTime(OUT PLARGE_INTEGER CurrentTime); > > CurrentTime > Points to a variable that receives the current time of day > in the standard time format > (that is, the number of 100-nanosecond intervals since > January 1, 1601)
помоему тут все доступно изложено:
это количество 100-наносекундных интервалов прошедших с January 1, 1601.
время естественно в UTC. какие проблемы то?
может математику стоит подучить?
cb.
|
| |
Только что почитал. Да все действительно так. ИМХО они перемудрили 27.05.03 12:32
Автор: amirul <Serge> Статус: The Elderman
|
> помоему тут все доступно изложено: > это количество 100-наносекундных интервалов прошедших с > January 1, 1601. > время естественно в UTC. какие проблемы то? > может математику стоит подучить? Не только математику. На самом деле дата 01.01.1601 была еще в григорианском летоисчислении, а потому если уж пересчитывать количество наносекунд до этой даты, то нужно учитывать выпавшие 11 дней и другое исчисление (или полное отсутствие - не помню) високосных годов до 1752 года.
Как по мне так лучше б они взяли в качестве точки отсчета ну хотя бы 1901. Отрицательное время все таки не так путает, как непонятно какая дата.
http://www.didyouknow.cd/russian/calendar_ru.htm
"В сентябре 1752 года, в Британии и ее американских колониях Юлианский календарь сменил Григорианский. Юлианский календарь на 11 дней назад от Григорианского, поэтому, во время его смены, после 14 сентября было 2 сентября. В результате - с 3 по 13 сентября не было абсолютно ничего!"
|
| | |
Только что почитал. Да все действительно так. ИМХО они перемудрили 28.05.03 11:14
Автор: cb <cb> Статус: Member
|
может я чего не понял, но историческая справка это конечно интересно, но на работу ф-й особо не сказывается:
#define MINUTE 60000 //msec
#define HOUR 3600000 //msec
#define DAY 86400000 //msec
#define GREGORIAN_CUTOVER_YEAR 1582
bool KTime::IsLeapYear(int nYear)
{
return nYear >= GREGORIAN_CUTOVER_YEAR ?
((nYear%4 == 0) && ((nYear%100 != 0)|(nYear%400 == 0))) : // Gregorian
(nYear%4 == 0); // Julian
}
void KTime::GetTime(__int64 nSystemTime, int& nHour, int& nMin, int& nMSec)
{
__int64 nTmp;
nSystemTime = nSystemTime / 10 / 1000; // nTime into msec
nSystemTime = nSystemTime % DAY; //
nTmp = (nSystemTime / HOUR);
nHour = (int) nTmp;
nTmp = (nSystemTime % HOUR) / MINUTE;
nMin = (int) nTmp;
nTmp = (nSystemTime % HOUR) % MINUTE;
nMSec = (int) nTmp;
}
void KTime::GetDate(__int64 nSystemTime, int& nYear, int& nMonth, int& nDay)
{
__int64 nDays;
int nDaysOfMonth[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
nSystemTime = nSystemTime / 10 / 1000; // nTime into msec
nDays = 1 + (nSystemTime / DAY); //
for (int i=1601; ; ++i)
{
if (IsLeapYear(i))
{
if (nDays>366)
nDays -= 366;
else
break;
}
else
{
if (nDays>365)
nDays -= 365;
else
break;
}
}
nYear = i;
if (IsLeapYear(nYear))
nDaysOfMonth[1]++;
for (i=0; i<12; ++i)
{
if (nDays <= nDaysOfMonth[i])
break;
nDays -= nDaysOfMonth[i];
}
nMonth = i+1;
nDay = (int)nDays;
}
---
cb.
|
| | | |
Да такой код я и сам написать могу :-) 28.05.03 11:40
Автор: amirul <Serge> Статус: The Elderman
|
> может я чего не понял, но историческая справка это конечно > интересно, но на работу ф-й особо не сказывается: Здесь предпосылка неверная. Для примера, тебе назначат встречу в 2 часа ночи последнего воскресенья сентября (или октября - у кого как). Ну для какого то конкретного года тебе конечно скажут конкретную дату). Вроде все хорошо. Но на поверку оказывается, что в последнем то воскресеньи 3 часа ночи наступает дважды из-за перевода часов. А если смещение в две недели.
Короче, реальное 1 января 1601 года и то что принято в мелкософте - это совершенно разные вещи (разница - минимум 2 недели, а то и больше). Я ничего не имею против и вроде как понятно что имели в виду. Но уж очень мелкософты любят вводить свои стандарты в пику общепринятым.
|
|
|