2012-06-14 27 views
13

Bir Amazon bulutundan gelen iletileri saklıyorum ve sıralı bir haritadaki zaman damgalarına göre sıralıyorum.Java Milisaniye tarihi

Date timestamp = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss.SSS'Z'", Locale.ENGLISH).parse(time); 

ve sonra anahtar tarih olmak Sıralanmış haritası onlara depolamak.Bu:

Aşağıdaki kod ile buluttan zaman damgası ayrıştırma ediyorum. Sorun, tarihin yalnızca saniyeler kesinliğine inmesidir. 1 saniye içinde birkaç mesaj gönderilebilir, bu yüzden bunların milisaniye hassasiyetle sipariş edilmesine ihtiyacım var. Buna izin veren bir veri yapısı var mı?

+3

Bize 'time' değerini gösterir. – adarshr

+1

Biçiminiz "SSS" yazıyor, böylece millilerin orada olması gerekiyor –

+0

Eğer "time" UTC zaman dilimini içeriyorsa ('Z'), yyyy-MM yerine' yyyy-MM-dd'T'hh: mm: ss.SSSZ' komutunu kullanın -dd'T'hh: dd: ss.SSS'Z''. 'Z', *' Z''nü yakalayacaktır, örneğin, '+ 0100' –

cevap

20

Kaynağınız 1 saniyeden daha yüksek bir çözünürlüğe sahip olduğu sürece. Desenten böyle görünüyor ama bize herhangi bir giriş örneği göstermediniz.

Date, 1970-01-01 tarihinden beri yalnızca long milisaniye civarında bir sarıcıdır. Yani zaten buna sahipsin. Date.getTime(), milisaniye hassasiyeti ile bunu döndürecektir.

Neden Tarih'in yalnızca bir saniye kesin olduğunu düşünüyorsunuz? Date.compareTo(Date anotherDate), milisaniye düzeyinde karşılaştırır. Yani SortedMap'iniz, garip bir şey yapmıyorsanız iyi çalışır.

+0

Milisaniye alamadım ya da onları ayarlayamadığımı düşündüm. Ama haklısın. Bunun için teşekkürler. Hata, geldikleri oranda mesaj alıyorum gerçeğinden geliyordu. Bu, zamanın doğru kullanılmadığı anlamına geliyordu. Daha sonra kuyruğu tüketerek 350 milisaniye bekleyerek düzeltildi. –

1

Bunu yapıp yapmadığınızdan emin değilim, ancak kendi karşılaştırıcınızı oluşturabilir ve bunu kullanabilirsiniz.

Bir yan not olarak, uygulamalarınızın kurulumuna bağlı olarak, SimpleDateFormat'u nasıl kullandığınıza dikkat etmek isteyebilirsiniz, bununla ilgili bazı sorunlar vardır.