Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Получить текущее время
- SYSTEMTIME st;
- GetLocalTime( & st );
- // Перевести его в кол-во мс. с 1970-го года
- tm m_time;
- m_time.tm_year = st.wYear - 1900;
- m_time.tm_mon = st.wMonth - 1;
- m_time.tm_mday = st.wDay;
- m_time.tm_hour = st.wHour;
- m_time.tm_min = st.wMinute;
- m_time.tm_sec = st.wSecond;
- unsigned __int64 tm64 = mktime( & m_time );
- // Получить часовой пояс
- TIME_ZONE_INFORMATION tz;
- GetTimeZoneInformation( & tz );
- __int64 timeShift = 0;
- if ( tz.DaylightDate.wMonth != 0 ) {
- timeShift = -tz.DaylightBias; // tz.DaylightBias ВСЕГДА отрицательное
- }
- timeShift += -tz.Bias; // tz.Bias ВСЕГДА отрицательное
- if ( timeShift < 0 ) {
- timeShift *= -1;
- }
- // Сначала получаем миллисекунды в младшей части, а часовой пояс - в старшей. Всё пока в intel'овской нотации
- unsigned __int64 intel_time = ( ( (unsigned __int64)timeShift & 0xFFFF ) << 48 ) | ( tm64 * 1000 + st.wMilliseconds );
- // Укладываем байты в выходной буфер в ОБРАТНОМ порядке
- const unsigned char * p_val = (unsigned char *)( & intel_time );
- for ( int i = 0, j = sizeof( intel_time ) - 1; i < sizeof( intel_time ); i++, j-- ) {
- out_buffer[ i ] = p_val[ j ];
- }
Advertisement
Add Comment
Please, Sign In to add comment