Я установил эмулятор на этот часовой пояс:
org.apache.harmony.luni.internal.util.ZoneInfo["CET",mRawOffset=3600000,mUseDst=true]
Это время Брюсселя, где есть летнее время, поэтому мы GMT + 02: 00 летом и GMT + 01: 00 зимой.
Однако программно нет способа обнаружить DST в июле 1970 года, но он обнаруживает его в 2011 году. Например:
TimeZone tz = TimeZone.getDefault();
if(tz.inDaylightTime(new Date(15638400000))){ //This timestamp is 01/07/1970 00:00:00:00 GMT
System.out.println("daylight time in July 1970"); //Not printed, despite being clearly in summer.
}
if(tz.inDaylightTime(new Date())){ // Now, 28/06/2011
System.out.println("daylight time in June 2011"); //printed, thats OK
}
Что не так с этим кодом? Там не было летнего времени в 1970 году? То же самое происходит со смещением, которое, согласно Javadoc, включает в себя DST:
int off = tz.getOffset(15638400000); //This returns +01:00, wrong!!
int off2 = tz.getOffset(System.currentTimeMillis()); //returns +02:00, OK.
Некоторые идеи об этом поведении?
Спасибо.
EDIT:
Я провел несколько тестов для этого часового пояса, и первое лето с летним временем было обнаружено в 1977 году. В конце концов, должна быть дата начала, с которой эта политика была реализована. Однако 1977 год кажется мне немного запоздалым (нефтяной кризис был в 1970 и 1973 годах). Я не нашел ни одного официального документа, подтверждающего это.