< 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 >