From: Derick Rethans Date: Sat, 15 Oct 2005 18:14:40 +0000 (+0000) Subject: - MF51: Fixed timezone guessing on Windows. X-Git-Tag: RELEASE_0_9_1~105 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=df0184f25a63c03a35c7fe77eff990bd2312f0bb;p=php - MF51: Fixed timezone guessing on Windows. --- diff --git a/ext/date/lib/fallbackmap.h b/ext/date/lib/fallbackmap.h index b6c3760616..7189eb88e3 100644 --- a/ext/date/lib/fallbackmap.h +++ b/ext/date/lib/fallbackmap.h @@ -1,3 +1,4 @@ + { "sst", 0, -11, "Pacific/Apia" }, { "hst", 0, -10, "Pacific/Honolulu" }, { "akst", 0, -9, "America/Anchorage" }, { "akdt", 1, -8, "America/Anchorage" }, @@ -10,7 +11,11 @@ { "est", 0, -5, "America/New_York" }, { "edt", 1, -4, "America/New_York" }, { "ast", 0, -4, "America/Halifax" }, - { "adt", 0, -3, "America/Halifax" }, + { "adt", 1, -3, "America/Halifax" }, + { "brt", 0, -3, "America/Sao_Paulo" }, + { "brst", 1, -2, "America/Sao_Paulo" }, + { "azost", 0, -1, "Atlantic/Azores" }, + { "azodt", 1, 0, "Atlantic/Azores" }, { "gmt", 0, 0, "Europe/London" }, { "bst", 1, 1, "Europe/London" }, { "cet", 0, 1, "Europe/Paris" }, @@ -23,6 +28,7 @@ { "pkt", 0, 5, "Asia/Karachi" }, { "ist", 0, 5.5, "Asia/Calcutta" }, { "npt", 0, 5.75, "Asia/Katmandu" }, + { "yekt", 1, 6, "Asia/Yekaterinburg" }, { "novst", 1, 7, "Asia/Novosibirsk" }, { "krat", 0, 7, "Asia/Krasnoyarsk" }, { "krast", 1, 8, "Asia/Krasnoyarsk" }, diff --git a/ext/date/php_date.c b/ext/date/php_date.c index 26b3e44da8..5f581060c6 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -339,26 +339,29 @@ static char* guess_timezone(TSRMLS_D) switch (GetTimeZoneInformation(&tzi)) { + /* no DST or not in effect */ case TIME_ZONE_ID_UNKNOWN: - /* we have no clue what it is, return UTC */ - php_error_docref(NULL TSRMLS_CC, E_STRICT, "It is not safe to rely on the systems timezone settings, please use the date.timezone setting, the TZ environment variable or the date_default_timezone_set() function. We use 'UTC' instead."); - tzid = "UTC"; - break; - case TIME_ZONE_ID_STANDARD: +php_win_std_time: tzid = timelib_timezone_id_from_abbr("", (tzi.Bias + tzi.StandardBias) * -60, 0); if (! tzid) { tzid = "UTC"; } - php_error_docref(NULL TSRMLS_CC, E_STRICT, "It is not safe to rely on the systems timezone settings, please use the date.timezone setting, the TZ environment variable or the date_default_timezone_set() function. We use '%s' for '%.1f/no DST' instead.", tzid, (float) ((tzi.Bias + tzi.StandardBias) / -60)); + php_error_docref(NULL TSRMLS_CC, E_STRICT, "It is not safe to rely on the systems timezone settings, please use the date.timezone setting, the TZ environment variable or the date_default_timezone_set() function. We use '%s' for '%.1f/no DST' instead.", tzid, ((tzi.Bias + tzi.StandardBias) / -60.0)); break; + /* DST in effect */ case TIME_ZONE_ID_DAYLIGHT: + /* If user has disabled DST in the control panel, Windows returns 0 here */ + if (tzi.DaylightBias == 0) { + goto php_win_std_time; + } + tzid = timelib_timezone_id_from_abbr("", (tzi.Bias + tzi.DaylightBias) * -60, 1); if (! tzid) { tzid = "UTC"; } - php_error_docref(NULL TSRMLS_CC, E_STRICT, "It is not safe to rely on the systems timezone settings, please use the date.timezone setting, the TZ environment variable or the date_default_timezone_set() function. We use '%s' for '%.1f/DST' instead.", tzid, (float) ((tzi.Bias + tzi.DaylightBias) / -60)); + php_error_docref(NULL TSRMLS_CC, E_STRICT, "It is not safe to rely on the systems timezone settings, please use the date.timezone setting, the TZ environment variable or the date_default_timezone_set() function. We use '%s' for '%.1f/DST' instead.", tzid, ((tzi.Bias + tzi.DaylightBias) / -60.0)); break; } return tzid;