Skip to content
This repository has been archived by the owner. It is now read-only.
Permalink
Browse files
8250636: iso8601_time returns incorrect offset part on MacOS
Reviewed-by: dholmes, gziemski
  • Loading branch information
Dmitry Cherepanov committed Aug 10, 2020
1 parent bfbfd92 commit 1408a8f868104c1c9330b6762d0ab239e160f51d
Showing 1 changed file with 16 additions and 21 deletions.
@@ -88,18 +88,6 @@ 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);
@@ -152,21 +140,28 @@ char* os::iso8601_time(char* buffer, size_t buffer_length, bool utc) {
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;
time_t UTC_to_local = 0;
if (!utc) {
#if defined(_WINDOWS)
long zone;
_get_timezone(&zone);
UTC_to_local = static_cast<time_t>(zone);

// If daylight savings time is in effect,
// we are 1 hour East of our time zone
if (time_struct.tm_isdst > 0) {
UTC_to_local = UTC_to_local - seconds_per_hour;
}
#else
// tm_gmtoff already includes adjustment for daylight saving
UTC_to_local = -(time_struct.tm_gmtoff);
#endif
}

// Compute the time zone offset.

0 comments on commit 1408a8f

Please sign in to comment.