< prev index next >
src/hotspot/share/runtime/os.cpp
Print this page
@@ -87,19 +87,36 @@
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)
- return time_struct->tm_gmtoff;
+ offset = -(time_struct->tm_gmtoff);
#elif defined(_WINDOWS)
long zone;
_get_timezone(&zone);
- return static_cast<time_t>(zone);
+ offset = static_cast<time_t>(zone);
#else
- return timezone;
+ 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,21 +167,11 @@
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;
- }
+ time_t UTC_to_local = get_timezone(&time_struct);
// No offset when dealing with UTC
if (utc) {
UTC_to_local = 0;
}
@@ -181,10 +188,13 @@
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 >