DateFormatUtils.format with Timezone parameter "CET" produces wrong date in
summer time 1945 to 1949
----------------------------------------------------------------------------------------------------
Key: LANG-312
URL: https://issues.apache.org/jira/browse/LANG-312
Project: Commons Lang
Issue Type: Bug
Affects Versions: 2.2, 2.1
Environment: IBM Java 1.4.2, Sun Java 1.4.2, Windows XP, SuSE Linux
Enterprise 9, German systems, at winter time
Reporter: Hayo
DateFormatUtils.format(dt, "dd/MM/yyyy", Timezone.getTimezone("CET"),
Locale.GERMANY); returns the date of the day before during summer time of the
years 1945 to 1949. The problem was detected on a system running in
Locale.GERMANY, current time "CET", JDK 1.4.2.
The problem does not occur with the call DateFormatUtils.format(dt,
"dd/MM/yyyy"); which presumably uses the system defaults. These are likely to
be the same as the parameters i have passed.
The following code snippet demonstrates the problem:
for (int year = 0; year < 150; year ++) {
for (int month = 0; month <= 11; month ++) {
for (int day = 1; day <= 28; day ++) {
java.sql.Date dt = new java.sql.Date(year, month, day); //
or java.util.Date
String def = DateFormatUtils.format(dt, "dd/MM/yyyy");
String cet = DateFormatUtils.format(dt, "dd/MM/yyyy",
Timezone.getTimezone("CET"), Locale.GERMANY);
if (!cet.equals(def)) {
System.err.println(dt.toLocaleString() + " Default: " +
def + " CET: " + cet);
}
}
}
}
Output:
------
03.04.1945 00:00:00 Default: 03/04/1945 CET:02/04/1945
[...]
18.11.1945 00:00:00 Default: 18/11/1945 CET:17/11/1945
15.04.1946 00:00:00 Default: 15/04/1946 CET:14/04/1946
[...]
07.10.1946 00:00:00 Default: 07/10/1946 CET:06/10/1946
07.04.1947 00:00:00 Default: 07/04/1947 CET:06/04/1947
[...]
05.10.1947 00:00:00 Default: 05/10/1947 CET:04/10/1947
19.04.1948 00:00:00 Default: 19/04/1948 CET:18/04/1948
[...]
03.10.1948 00:00:00 Default: 03/10/1948 CET:02/10/1948
11.04.1949 00:00:00 Default: 11/04/1949 CET:10/04/1949
[...]
02.10.1949 00:00:00 Default: 02/10/1949 CET:01/10/1949
This seems to be during the summer time of 1949 to 1945 in Berlin, and only in
Berlin. Setting the Locale to any other value has no effect on that. So i ask
myself, what results other central european users get. Setting the Timezone to
"GMT+2" extracts exactly the high summer times in 1945 and 1947 (MEHSZ). (See
below for list of summer times).
I could guess that some calendar calculations work with different libraries
that have different summer time maps (java.util.Date vs. Calendar). This might
depend on my environment, so this task should be tested by others (with their
local Timezone).
The API documentation does not clearly state what effect the Timezone/Locale
parameters should have.
In my strong opinion at least dates passed as java.sql.Date should not be
normalized to summer/standard time. A date is a date! For java.util.Date the
date recalculation behaviour should be mentioned in the docs, if it is really
intended this way by design.
===============================================================================
These where the actual summer times in Germany
(http://www.ptb.de/de/org/4/44/441/salt.htm
http://de.wikipedia.org/wiki/Hochsommerzeit#Mitteleurop.C3.A4ische_Sommerzeit)
a) Summer time, Advance to CET (GMT+1): 1 hour (GMT+2)
1916-04-30 23:00:00 CET until 1916-10-01 1:00:00 CEST
1917-04-16 2:00:00 CET until 1917-09-17 3:00:00 CEST
1918-04-15 2:00:00 CET until 1918-09-16 3:00:00 CEST
1919 until 1939: No Summer time
1940-04-01 2:00:00 CET until 1942-11-02 3:00:00 CEST
1943-03-29 2:00:00 CET until 1943-10-04 3:00:00 CEST
1944-04-03 2:00:00 CET until 1944-10-02 3:00:00 CEST
1945-04-02 2:00:00 CET until 1945-09-16 2:00:00 CEST
Special: Berlin and sowjet occupied zone:
(1945-05-24) 2:00:00 CET until 1945-11-18 3:00:00 CEST
(1945-05-24) 3:00:00 CET until 1945-09-24 2:00:00 MEHSZ
1946-04-14 2:00:00 CET until 1946-10-07 3:00:00 CEST
1947-04-06 3:00:00 CET until 1947-10-05 3:00:00 CEST
1948-04-18 2:00:00 CET until 1948-10-03 3:00:00 CEST
1949-04-10 2:00:00 CET until 1949-10-02 3:00:00 CEST
b) High summer time, Advance to CET: 2 hours (GMT+3)
1947-05-11 3:00:00 CEST until 1947-06-29 3:00:00 MEHSZ
c) From 1950 to 1979 no Summer times
d) 1980 to now (most of central europe)
1980-04-06 2:00:00 CET until 1980-09-28 3:00:00 CEST
...
ongoing until today
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
https://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]