musl - musl - an implementation of the standard library for Linux-based systems

index : musl
musl - an implementation of the standard library for Linux-based systems
summary refs log tree commit diff
diff options
context:
space:
mode:
authorRich Felker <dalias@aerifal.cx>2017年03月15日 20:27:38 -0400
committerRich Felker <dalias@aerifal.cx>2017年03月15日 20:27:38 -0400
commitdbff2bb889bc831599b022c49252c69bf48f4e4e (patch)
treeee5c9bd5f0bdbc723571653d87734f88b25cb223
parent74bca42e1613c58805d7b048841c2fa8f8502158 (diff)
downloadmusl-dbff2bb889bc831599b022c49252c69bf48f4e4e.tar.gz
fix POSIX-format TZ dst transition times for southern hemisphere
the time of day at which daylight time switches over is specified in local time in the dst state prior to the transition. the code for handling this wrongly assumed it needed to switch whether dst or standard offset is applied to the transition time when the dst end date is before the dst start date (souther hemisphere summer), but in fact the end transition time should always be adjusted for dst, and the start transition time should always be adjusted for standard time.
Diffstat
-rw-r--r--src/time/__tz.c 12
1 files changed, 4 insertions, 8 deletions
diff --git a/src/time/__tz.c b/src/time/__tz.c
index 0e0c4ea2..ffe8d402 100644
--- a/src/time/__tz.c
+++ b/src/time/__tz.c
@@ -373,18 +373,14 @@ void __secs_to_zone(long long t, int local, int *isdst, long *offset, long *oppo
long long t0 = rule_to_secs(r0, y);
long long t1 = rule_to_secs(r1, y);
+ if (!local) {
+ t0 += __timezone;
+ t1 += dst_off;
+ }
if (t0 < t1) {
- if (!local) {
- t0 += __timezone;
- t1 += dst_off;
- }
if (t >= t0 && t < t1) goto dst;
goto std;
} else {
- if (!local) {
- t1 += __timezone;
- t0 += dst_off;
- }
if (t >= t1 && t < t0) goto std;
goto dst;
}
generated by cgit v1.2.1 (git 2.18.0) at 2025年09月29日 11:18:06 +0000

AltStyle によって変換されたページ (->オリジナル) /