aşağıdaki kod parçasını bakınız davranır:SimpleDateFormat tutarsız
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));
şimdi, ofset +2h
olan bir ülkede yaşıyorum +1
yaz saati (şu anda). Olduğu gibi Bu kodu çalıştırırsanız ben takvim en offset soran çizgiyi yorumsuz , bu
1980-01-01T13:00:00+0200
yazdırır, programın çıktısı
1980-01-01T14:00:00+0300
neden oluyor ki herhangi bir fikir olduğunu ve tutarlı bir çıktı nasıl elde edebilirim?
Daha açık olmayan şeylerden kaçınmak için: Bazı eski kodları kullandığım için, java 8 bir seçenek değil. Ve evet, burada kilit nokta NEDEN, ve ne gibi geçici çözümler var? Ve orada 2 whys:
- Neden ben bir 0300 TZ geçmek yapmak ve varsayılan olarak ben bir 0200 tane alıyorsunuz? (SimpleDateFormat, her zaman aksi belirtilmedikçe, TimeZone.getDefault kullanmalıdır).
- Neden farklı bir yanıt veriyor, çünkü onun takvim örneğinde bir alıcı buluyorum.
İçinde tutarsız ne var? Ofset kullanmadığınız zaman, size olduğu gibi tarih verir ve kullandığınız zaman dilimine göre değişir. –
@RamanShrivastava Bir zamanlayıcıyı çağırmak, format işlevinin çıktısını değiştirmemelidir. – wonderb0lt