2011-01-07 32 views
13

İki farklı biçimde, aynı anı tanımlayan iki zaman damgası var.Saat dilimi ile Joda ile ayrıştırma tarihi

2010-10-03 18:58:07 ve 2010-10-03T16:58:07.000+02:00.

Zaman damgalarını Joda ile iki farklı tarih biçemiyle ayrıştırıyorum. Sonunda aynı anda olma hali açısından eşit olan iki DateTime nesnesine sahip olmak istiyorum.

DateFormatter, saat dilimlerini ve yerel ayarları denetlemek için birkaç yöntem sunar ancak çalışamadım. peşin

final String date1 = "2010-10-03 18:58:07"; // Europe/Berlin local time 
    final DateTimeFormatter formatter1 = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss"); 
    final DateTime dateTime1 = formatter1.parseDateTime(date1); 

    final String date2 = "2010-10-03T16:58:07.000+02:00"; // Europe/Berlin local time with time zone 
    final DateTimeFormatter formatter2 = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ"); 
    final DateTime dateTime2 = formatter2.parseDateTime(date2); 

    Assert.assertTrue(dateTime1.isEqual(dateTime2)); 

sayesinde birileri bana yardımcı olabilir:

Bu

ben çalışmak istiyorum koddur!

cevap

6

Varsayılan saat diliminiz Avrupa/Berlin ise, 2010-10-03T16: 58: 07.000 + 00: 00'a karşılık gelir.

Büyük olasılıkla dize gösterimindeki saat dilimi alanını yanlış anlayabilirsiniz. Zaman damganız 2010-10-03T16: 58: 07.000 + 02: 00, "GMT'den +2 saatlik bir sapma ile bir saat diliminde saat 16:58:07 veya başka bir ifadede" anlamına gelir. : 58: 07 in Berlin ".Bu beklediğiniz anlamına geldiğini sanıyorum 16:58:07 GMT?

+0

"2010-10-03T16: 58: 07.000 + 02: 00'de bir türünüz, GMT'den +2 saatlik bir uzaklıkla saat diliminde 16:58:07 olmadığı anlamına gelir". Okumak zorundadır: "2010-10-03T16: 58: 07.000 + 02: 00, UTC'den +2 saatlik bir sapma ile bir saat diliminde saat 16:58:07 anlamına gelir." – MicSim

+0

Evet, 16 olmasını bekledim. : 58: 07 GMT. Sonra zaman damgaları sadece kırık gibi görünüyor. Bunlar, farklı sunucuların iki farklı günlük dosyasından gelen zaman damgalarıdır. Ve aynı olayı belirttiklerinden eminim. Yani bu benim kafa karışıklığımdı. – wilfried

+0

@MacSim: Tabii, orada biraz hızlı yazdım. – jarnbjo

4

İki zaman damgasız zaman içinde aynı anıyı temsil etmiyor (jambjo zaten belirtilmiş gibi). Bkz. Time zone as offsets from UTC wikipedia üzerinde

Ayrıca, nasıl çalıştığını gösteren parseDateTime belgelerine bakın.Eğer herhangi bir zaman dilimi sağlamadıysanız, varsayılan saat dilimi uygulanacaktır (yani, eğer varsa, Berlin saat dilimi UTC + 2). Bu nedenle:

  • 2010-10-03 18:58:07, beklendiği gibi 2010-10-03T18:58:07.000+02:00 (Berlin'de 18: 58'de UTC'ye 2 saat, UTC'de 16:58 anlamına gelir) olur. sağlanan bir zaman dilimi yoktur, çünkü olduğu gibi
  • 2010-10-03T16:58:07.000+02:00 kalır (yani UTC 14:58 demektir UTC, 2 saat ofset ile Berlin'de 16:58)

fikir var Umut . İstenen sonuçları almak için withZone yöntemiyle zamanları ayarlamanız gerekecektir.

İlgili konular