< prev index next >

src/hotspot/share/runtime/os.cpp

Print this page

        

*** 87,105 **** static size_t cur_malloc_words = 0; // current size for MallocMaxTestWords DEBUG_ONLY(bool os::_mutex_init_done = false;) static time_t get_timezone(const struct tm* time_struct) { #if defined(_ALLBSD_SOURCE) ! return time_struct->tm_gmtoff; #elif defined(_WINDOWS) long zone; _get_timezone(&zone); ! return static_cast<time_t>(zone); #else ! return timezone; #endif } int os::snprintf(char* buf, size_t len, const char* fmt, ...) { va_list args; va_start(args, fmt); --- 87,122 ---- static size_t cur_malloc_words = 0; // current size for MallocMaxTestWords DEBUG_ONLY(bool os::_mutex_init_done = false;) static time_t get_timezone(const struct tm* time_struct) { + // seconds to add to local time to get UTC + time_t offset; + #if defined(_ALLBSD_SOURCE) ! offset = -(time_struct->tm_gmtoff); #elif defined(_WINDOWS) long zone; _get_timezone(&zone); ! offset = static_cast<time_t>(zone); #else ! offset = timezone; ! #endif ! ! // tm_gmtoff already includes adjustment for daylight saving ! #if !defined(_ALLBSD_SOURCE) ! // If daylight savings time is in effect, ! // we are 1 hour East of our time zone ! const time_t seconds_per_minute = 60; ! const time_t minutes_per_hour = 60; ! const time_t seconds_per_hour = seconds_per_minute * minutes_per_hour; ! if (time_struct->tm_isdst > 0) { ! offset = offset - seconds_per_hour; ! } #endif + + return offset; } int os::snprintf(char* buf, size_t len, const char* fmt, ...) { va_list args; va_start(args, fmt);
*** 150,170 **** if (localtime_pd(&seconds_since_19700101, &time_struct) == NULL) { assert(false, "Failed localtime_pd"); return NULL; } } ! const time_t zone = get_timezone(&time_struct); ! ! // If daylight savings time is in effect, ! // we are 1 hour East of our time zone ! const time_t seconds_per_minute = 60; ! const time_t minutes_per_hour = 60; ! const time_t seconds_per_hour = seconds_per_minute * minutes_per_hour; ! time_t UTC_to_local = zone; ! if (time_struct.tm_isdst > 0) { ! UTC_to_local = UTC_to_local - seconds_per_hour; ! } // No offset when dealing with UTC if (utc) { UTC_to_local = 0; } --- 167,177 ---- if (localtime_pd(&seconds_since_19700101, &time_struct) == NULL) { assert(false, "Failed localtime_pd"); return NULL; } } ! time_t UTC_to_local = get_timezone(&time_struct); // No offset when dealing with UTC if (utc) { UTC_to_local = 0; }
*** 181,190 **** --- 188,200 ---- if (local_to_UTC < 0) { sign_local_to_UTC = '-'; abs_local_to_UTC = -(abs_local_to_UTC); } // Convert time zone offset seconds to hours and minutes. + const time_t seconds_per_minute = 60; + const time_t minutes_per_hour = 60; + const time_t seconds_per_hour = seconds_per_minute * minutes_per_hour; const time_t zone_hours = (abs_local_to_UTC / seconds_per_hour); const time_t zone_min = ((abs_local_to_UTC % seconds_per_hour) / seconds_per_minute); // Print an ISO 8601 date and time stamp into the buffer
< prev index next >