JodaTime'in DateTime kurucusu bunu sizin için halledebilir. (ı soru ne zaman gönderildiğini bu doğru olsaydı emin değilim, ama ben daha yeni çözüm eklemek düşündüm bu yüzden bir üst Google sonucu.)
birkaç API seçenekleri vardır:
public DateTime(Object instant);
public DateTime(Object instant, DateTimeZone zone);
Her iki seçenek de java.sql.Timestamp öğesini kabul eder, çünkü java.util.Date öğesini genişletir, ancak DateSpace ve Date öğesinin yalnızca milisaniye çözünürlüğü * olduğundan Nanosaniye'ler yoksayılır (zeminli). Belirli bir saat dilimi olmadan, DateTimeZone.UTC varsayılan olacaktır.
< Didaktik Mod >
"Çözünürlük" kaç basamak sağlandığını gösterir. "Hassas", temsilin ne kadar doğru olduğu. Örneğin, MSSQL'in DateTime, milisaniye çözünürlüğüne sahiptir, ancak yalnızca ikinci hassasiyetin 1/3'ü kadardır (DateTime2, değişken çözünürlüğe ve daha yüksek hassasiyete sahiptir).
</Didaktik Modu >
UTC zaman damgası milisaniyesinde Çözünürlük Örnek:
new DateTime(resultSet.getTimestamp(1));
o zaman java.sql.Timestamp kullanamaz veritabanınızda TIME ZONE İLE ZAMAN kullanıyorsanız, çünkü Saat dilimlerini desteklemiyor. ResultSet # getString kullanmanız ve dizeyi ayrıştırmanız gerekecek. İkinci ebatları, Örnek ile Zaman Dilimi (biçim ofset) ile
DateTime dt = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss")
.parseDateTime(resultSet.getString(1));
Zaman Damgası: İkinci ebatları, Örnek ** ile
LocalDateTime dt = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss")
.parseLocalDateTime(resultSet.getString(1));
UTC Zaman Damgası: İkinci ebatları, Örnek ** ile Zaman Dilimi olmayan
zaman damgası **:
DateTime dt = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss Z")
.parseDateTime(resultSet.getString(1));
Bonus: DateTimeFormat # forPattern statik ally önbellekleri parsers'a göre böylelikle yapmanız gerekmez.
< Didaktik Modu >
Genellikle çözünürlük açık hale ve ara nesneleri üreten önlemek için lütfen DBO modelinde bir dize kullanarak önerilir. (2013-11-14 09:55:25 2013-11-14 09: 55: 25.000'e eşit midir?)) Genellikle veri koruma endişeleri için optimize edilen "veritabanı modeli nesneleri" ve "iş modeli nesneleri" arasında bir dönüşüm/haritalama katmanı ile hizmet seviyesi kullanımı için optimizasyon yapmaya çalışıyorum. CRUD tabanlı DAO'ların iş nesnelerini doğrudan öncelikleri bir araya getirme eğiliminde olduğunu ve kaçırılmayan kenar durumları nedeniyle beklenmedik yerlerden istisnalar atmadıklarını düşünüyorum. Açık bir dönüştürme katmanına sahip olmak, veri kaynağını denetlemiyormuş gibi, gerekirse doğrulama eklemenize de olanak tanır. Endişeleri ayırmak ayrıca her bir katmanı bağımsız olarak test etmeyi kolaylaştırır.
</Didaktik Modu >
* iş modelinde nanosaniye çözünürlüğe çözmek için gerekirse farklı bir kütüphaneyi kullanmak gerekecek.
** Zaman damgası Dize biçimi, veritabanları arasında değişebilir, emin değil.
TimeZone bileşeni nerede? Tarih ve saati sadece "kopyaladınız" ancak gerçek değeri etkileyebilecek zaman dilimini değil. –
Ne demek istediğimi açıklayabilir misiniz? dateTime.getMillis(), zaman dilimini dikkate alan epoch'tan beri milisaniye döndürür. –
Jota-time'ın nanosaniye saklamadığı, Timestamp'ın yaptığı gibi. Bu ikisi arasındaki herhangi bir dönüşüm nanosaniye hassasiyetini kaybeder. – Gili