diff options
author | Nobuyoshi Nakada <[email protected]> | 2019-04-23 13:09:34 +0900 |
---|---|---|
committer | Nobuyoshi Nakada <[email protected]> | 2019-07-27 12:41:33 +0900 |
commit | 149e414ed529d27aaeb0543bc133e08c782d8d41 (patch) | |
tree | 8eab5039d7e5e56bc2d9a23f4d7188e55fcf746f /time.c | |
parent | 8bccbf3cfea8c1059d40db5b5e61900cf6cf29d3 (diff) |
Initialize DST flag
* time.c (zone_timelocal): initialize DST flag by asking the
timezone object. [Bug #15988]
Diffstat (limited to 'time.c')
-rw-r--r-- | time.c | 13 |
1 files changed, 13 insertions, 0 deletions
@@ -2201,6 +2201,16 @@ extract_vtm(VALUE time, struct vtm *vtm, VALUE subsecx) return t; } +static void +zone_set_dst(VALUE zone, struct time_object *tobj, VALUE tm) +{ + ID id_dst_p; + VALUE dst; + CONST_ID(id_dst_p, "dst?"); + dst = rb_check_funcall(zone, id_dst_p, 1, &tm); + tobj->vtm.isdst = (dst != Qundef && RTEST(dst)); +} + static int zone_timelocal(VALUE zone, VALUE time) { @@ -2220,6 +2230,7 @@ zone_timelocal(VALUE zone, VALUE time) s = wadd(s, v2w(tobj->vtm.subsecx)); } tobj->timew = s; + zone_set_dst(zone, tobj, tm); return 1; } @@ -2239,6 +2250,7 @@ zone_localtime(VALUE zone, VALUE time) s = extract_vtm(local, &tobj->vtm, subsecx); tobj->tm_got = 1; zone_set_offset(zone, tobj, s, t); + zone_set_dst(zone, tobj, tm); return 1; } @@ -5323,6 +5335,7 @@ end_submicro: ; if (!NIL_P(zone)) { zone = mload_zone(time, zone); tobj->vtm.zone = zone; + zone_localtime(zone, time); } return time; |