borisbn

write dateTime

Jan 9th, 2014
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.47 KB | None | 0 0
  1.     // Получить текущее время
  2.     SYSTEMTIME st;
  3.     GetLocalTime( & st );
  4.     // Перевести его в кол-во мс. с 1970-го года
  5.     tm m_time;
  6.     m_time.tm_year = st.wYear - 1900;
  7.     m_time.tm_mon = st.wMonth - 1;
  8.     m_time.tm_mday = st.wDay;
  9.     m_time.tm_hour = st.wHour;
  10.     m_time.tm_min = st.wMinute;
  11.     m_time.tm_sec = st.wSecond;
  12.     unsigned __int64 tm64 = mktime( & m_time );
  13.     // Получить часовой пояс
  14.     TIME_ZONE_INFORMATION tz;
  15.     GetTimeZoneInformation( & tz );
  16.     __int64 timeShift = 0;
  17.     if ( tz.DaylightDate.wMonth != 0 ) {
  18.         timeShift = -tz.DaylightBias; // tz.DaylightBias ВСЕГДА отрицательное
  19.     }
  20.     timeShift += -tz.Bias; // tz.Bias ВСЕГДА отрицательное
  21.     if ( timeShift < 0 ) {
  22.         timeShift *= -1;
  23.     }
  24.     // Сначала получаем миллисекунды в младшей части, а часовой пояс - в старшей. Всё пока в intel'овской нотации
  25.     unsigned __int64 intel_time = ( ( (unsigned __int64)timeShift & 0xFFFF ) << 48 ) | ( tm64 * 1000 + st.wMilliseconds );
  26.     // Укладываем байты в выходной буфер в ОБРАТНОМ порядке
  27.     const unsigned char * p_val = (unsigned char *)( & intel_time );
  28.     for ( int i = 0, j = sizeof( intel_time ) - 1; i < sizeof( intel_time ); i++, j-- ) {
  29.         out_buffer[ i ] = p_val[ j ];
  30.     }
Advertisement
Add Comment
Please, Sign In to add comment