Вижте следната част от кода:
String timeString = "1980-01-01T14:00:00+0300";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
Date date2 = sdf.parse(timeString);
// sdf.getCalendar().get(Calendar.ZONE_OFFSET);
System.out.println(sdf.format(date2));
сега съм в държава, която има +2h
компенсиране, +1
лятно часово време (в момента). Ако пусна този код такъв, какъвто е, той ще се отпечата
1980-01-01T13:00:00+0200
Ако разкоментирам реда, питащ за отместването на календара, изходът на програмата е
1980-01-01T14:00:00+0300
Някаква идея защо се случва това и как мога да получа последователен резултат?
За да избегна още неясни неща: Тъй като боравя с някакъв наследен код, java 8 не е опция. И да, ключовият момент тук е ЗАЩО, а не какви са заобиколните решения? И има 2 ЗАЩО:
- Защо преминавам +0300 TZ и по подразбиране получавам +0200? (SimpleDateFormat винаги трябва да използва TimeZone.getDefault, освен ако не е посочено друго).
- Защо дава различен отговор, само защото се обаждам на getter в неговия календарен екземпляр.