# HG changeset patch # User Jim Meyering # Date 1319994774 -3600 # Node ID 83b923a6f599c818a81427b5297bba9d0a9f6f0f # Parent ba9cbce206c3ca6efe50978a3df6f460e871d553 test-parse-datetime.c: avoid new DST-related false positive test failure * tests/test-parse-datetime.c (gmt_offset): Determine the "gmt_offset" based on the time/date we'll convert, not the current time. Otherwise, the moment we cross a DST boundary like today's in Europe, (CEST to CET), that offset ends up being one hour off. diff --git a/ChangeLog b/ChangeLog --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2011-10-30 Jim Meyering + + test-parse-datetime.c: avoid new DST-related false positive test failure + * tests/test-parse-datetime.c (gmt_offset): Determine the "gmt_offset" + based on the time/date we'll convert, not the current time. + Otherwise, the moment we cross a DST boundary like today's in + Europe, (CEST to CET), that offset ends up being one hour off. + 2011-10-27 Bruno Haible fstat: Tweak documentation. diff --git a/tests/test-parse-datetime.c b/tests/test-parse-datetime.c --- a/tests/test-parse-datetime.c +++ b/tests/test-parse-datetime.c @@ -94,20 +94,17 @@ #endif /* ! HAVE_TM_GMTOFF */ static long -gmt_offset () +gmt_offset (time_t s) { - time_t now; long gmtoff; - time (&now); - #if !HAVE_TM_GMTOFF - struct tm tm_local = *localtime (&now); - struct tm tm_gmt = *gmtime (&now); + struct tm tm_local = *localtime (&s); + struct tm tm_gmt = *gmtime (&s); gmtoff = tm_diff (&tm_local, &tm_gmt); #else - gmtoff = localtime (&now)->tm_gmtoff; + gmtoff = localtime (&s)->tm_gmtoff; #endif return gmtoff; @@ -123,16 +120,17 @@ const char *p; int i; long gmtoff; + time_t ref_time = 1304250918; set_program_name (argv[0]); - gmtoff = gmt_offset (); + gmtoff = gmt_offset (ref_time); /* ISO 8601 extended date and time of day representation, 'T' separator, local time zone */ p = "2011-05-01T11:55:18"; - expected.tv_sec = 1304250918 - gmtoff; + expected.tv_sec = ref_time - gmtoff; expected.tv_nsec = 0; ASSERT (parse_datetime (&result, p, 0)); LOG (p, expected, result); @@ -142,7 +140,7 @@ /* ISO 8601 extended date and time of day representation, ' ' separator, local time zone */ p = "2011-05-01 11:55:18"; - expected.tv_sec = 1304250918 - gmtoff; + expected.tv_sec = ref_time - gmtoff; expected.tv_nsec = 0; ASSERT (parse_datetime (&result, p, 0)); LOG (p, expected, result); @@ -153,7 +151,7 @@ /* ISO 8601, extended date and time of day representation, 'T' separator, UTC */ p = "2011-05-01T11:55:18Z"; - expected.tv_sec = 1304250918; + expected.tv_sec = ref_time; expected.tv_nsec = 0; ASSERT (parse_datetime (&result, p, 0)); LOG (p, expected, result); @@ -163,7 +161,7 @@ /* ISO 8601, extended date and time of day representation, ' ' separator, UTC */ p = "2011-05-01 11:55:18Z"; - expected.tv_sec = 1304250918; + expected.tv_sec = ref_time; expected.tv_nsec = 0; ASSERT (parse_datetime (&result, p, 0)); LOG (p, expected, result);