biçim dizesi fraksiyonel saniye kaldırmayı deneyin Biçim String edilmelidir benim için çalışıyor, bu deneyin. Sadece aynı konuya girdim, ama biraz farklı bir formatla. Giriş formatım ISO formatında değildi ("T" yok, ve "Z" yok), ama belirti aynıydı - zaman, birkaç dakika ve saniye olarak rastgele sayıldı, ama her şey yolundaydı. Fraksiyonel ikinci biçimi kullanırken
:
SimpleDateFormat dateFormater = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSSSS");
# Parsed date: 2011-05-27 17:11:15.271816 => Fri May 27 17:15:46 EDT 2011
# Parsed date: 2011-05-27 17:09:37.750343 => Fri May 27 17:22:07 EDT 2011
# Parsed date: 2011-05-27 17:05:55.182921 => Fri May 27 17:08:57 EDT 2011
# Parsed date: 2011-05-27 16:55:05.69092 => Fri May 27 16:56:14 EDT 2011
# Parsed date: 2011-05-27 16:38:35.50348 => Fri May 27 16:39:25 EDT 2011
ben biçiminden fraksiyonel saniye kaldırarak sabit Bu benim Günlük sonuçları benziyordu şeydir.
SimpleDateFormat dateFormater = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
# Parsed date: 2011-05-27 17:11:15.271816 => Fri May 27 17:11:15 EDT 2011
# Parsed date: 2011-05-27 17:09:37.750343 => Fri May 27 17:09:37 EDT 2011
# Parsed date: 2011-05-27 17:05:55.182921 => Fri May 27 17:05:55 EDT 2011
# Parsed date: 2011-05-27 16:55:05.69092 => Fri May 27 16:55:05 EDT 2011
# Parsed date: 2011-05-27 16:38:35.50348 => Fri May 27 16:38:35 EDT 2011
Ne oluyor düşünüyorum girdi dizesi benim "fraksiyonel saniye" bölümü (aynı OP örnekte doğrudur) çok uzun olmasıdır. Sadece
üç ondalık basamağı bekliyor gibi görünüyor. Hesapladığınızda (ilk örneği ele):
- fraksiyonel saniye = 0,271816 saniye DateFormat gördükleri
- ikinci
- 271816/1000 == ait
271816/1000
271 saniye
- 271/60 olduğunu = 4 dakika
- 271% 60 = 31 saniye 17:15:46 için
- 17:11:15 tam olarak 4 dakika,
kapalı 31 saniyedir 210
Evet, SimpleDateFormat işleyemez mikrosaniye. Yapılacak en kolay şey, fazladan 3 rakamı dışarı çıkarmaktır, örn. date = date.substring (0, date.length() - 4) + "Z"; –
@scottw: her zaman işe yaramayacak durum haricinde, örneğimde de görebileceğiniz gibi, son 2 öğenin 6 yerine yalnızca 5 hanesi var; Yani bazı durumlarda, tamamen yanlış olan sadece 1 ondalık basamak olabilir! Dizeyi sadece 3 ondalık basamağa sahip olacak şekilde kırpırsanız, o zaman iyi çalışır. Bizim durumumuzda, mikrosaniye ihtiyaç duymadık (sanırım birçok insan da bununla aynı fikirde olacaktı), bu yüzden sadece 'S' 'in format dizisinden çıkarılması, kullanılabilir bir zaman elde etmek için yeterlidir. Kesirli saniyeye ihtiyacınız varsa, evet, bazı dize manipülasyonu yapmak zorundasınız. – Joe
iyi bir nokta bu Joe - çözümüm, her zaman kesirli saniyeler için 6 basamaklı (sıfırlarla doldurma dahil) bir hizmetten çalıştığım için çalıştı, böylece string manipülasyonu ile kurtulabilecektim. –