2013-09-25 22 views
11

LocalDate numaralı veri tabanına sahip olmak için java.sql.Date numaralı dönüştürücüyü DB'deki bir Tarih alanına kaydetmek için dönüştürüyorum. Benim sorunum, java.sql.Date'a dönüştürdüğümde, EST'de olmamaya çalıştığım makine nedeniyle bir gün geride kalıyor. UTC'de olmak ve java.sql.Date'u millis kurucuyu kullanarak oluşturmak için Joda.DateTime'u kuruyorum. Ben bu yüzden farklı değerler görebilirsiniz ayıklama çıktısını saatler dahil ediyorum:LocalDate'den java.sql.Date adresine gitmek için doğru yol nedir?

item.getDate().toDateTimeAtStartOfDay() = {[email protected]}"2013-09-25T00:00:00.000Z" 
item.getDate().toDateTimeAtStartOfDay().getMillis() = 1380067200000 
new java.sql.Date(item.getDate().toDateTimeAtStartOfDay().getMillis()) = {[email protected]}"2013-09-24" 
item.getDate().getLocalMillis() = 1380067200000 
new java.sql.Date(item.getDate().getLocalMillis()) = {[email protected]}"2013-09-24" 
new java.util.Date(item.getDate().getLocalMillis()) = {[email protected]}"Tue Sep 24 20:00:00 EDT 2013" 
Üzerinde test ediyorum benim makine EST olarak bunun nedeni tahmin ediyorum java.util.Date oluşturmadan

ve LocalDate UTC'dir, ancak bunu düzeltmenin doğru yolu olduğundan emin değilim. Yerel saat dilimini alabileceğimi ve bunu değirmenlere ekleyebileceğimin farkındayım, ama bu harikulade bir düzeltmeye benziyor. Bunu sadece eksik olduğum için uygun bir yolu var mı? Oluşturabilir ve bir java.sql.Timestamp değil, bir java.sql.Date kullanmalıdır java.util.Date

new java.util.Date(item.getDate().getLocalMillis()).getTime() = 1380153600000 
item.getDate().toDateTimeAtStartOfDay().getMillis() = 1380153600000 
item.getDate() = {[email protected]}"2013-09-26" 
new java.sql.Date(item.getDate().getLocalMillis()).getTime() = 1380153600000 
new java.util.Date(item.getDate().getLocalMillis()) = {[email protected]}"Wed Sep 25 20:00:00 EDT 2013" 
new java.util.Date(item.getDate().getLocalMillis()).getTime() = 1380153600000 
+0

milisaniye sql değeri ve Date' nesneler 'util nedir? –

cevap

7

uygun dönüşümler:

public static final DateTimeZone jodaTzUTC = DateTimeZone.forID("UTC"); 

    // from java.sql.Date to LocalDate: 
    public static LocalDate dateToLocalDate(java.sql.Date d) { 
     if(d==null) return null; 
     return new LocalDate(d.getTime(), jodaTzUTC); 
    } 

    // from LocalDate to java.sql.Date: 
    public static java.sql.Date localdateToDate(LocalDate ld) { 
     if(ld==null) return null; 
     return new java.sql.Date(
      ld.toDateTimeAtStartOfDay(jodaTzUTC).getMillis()); 
    } 

benim DAO yardımcı mantığında kullanacağız . JDBC'de

Ve ayarlayıcı için aynı işlemi yapmalısınız.

-2

için milisaniye ile


Güncelleme. Özel olarak, java.sql.Date öğesinin zaman öğesi yoktur.

Zaman Bilgisine LOCALDATE dönüştürmek için:

Timestamp timestamp = new Timestamp(localDate.toDateMidnight().getMillis()); 

Zaman Bilgisine LocalDateTime dönüştürmek için:

Timestamp timestamp = new Timestamp(localDateTime.toDateTime().getMillis()); 
+2

Bir zaman damgasına ihtiyacım yok bir tarihe ihtiyacım var, veritabanında bir tarih saklıyorum. – Zipper

+0

LocalDate, java.sql.Date – Tristan

3

Let Diyelim ki joda yerel tarih

LocalDate loc = //... 

sonraki şekillerde, bölgenin bağımsızlığı ile java.sql.Date bunu conver yapabilirsiniz vardır: Eğer bulduysanız

Date date = new Date(loc .getYear() - 1900, loc .getMonthOfYear() - 1, loc .getDayOfMonth()); 

veya

Date date = Date.valueOf(l.toString()); 
+0

gibi zaman öğesine da sahip değildir Bu kurucu, –

0

Bu soruya nasıl dönüştürebileceğini araştırarak Java 8 L ocalDate, burada bunu nasıl:

kamu statik tarihi valueOf (LOCALDATE tarih)

olarak aylık değerinin aynı yıl, ay ve gün ile LOCALDATE nesneden tarihi bir örneğini edinir LocalDate verildi. LocalDate sağlanan yerel saatte bölgesinde yerel tarih olarak yorumlanır. Parametreler: date - dönüştürülecek bir LocalDate: a Date objectThrows: NullPointerException - date is nullSince: 1.8

örnek:

Date sqlDate = Date.valueOf(localDateObject); 
+2

kullanımdan kaldırılmıştır. Bu, Java 8 LocalDate ile Joda LocalDate'i karıştırır. Soru Joda LocalDate ile ilgili. – oulenz

+1

@oulenz haklısınız. Bunu belirtmek için bir düzenleme yaptım. – Tomasz

İlgili konular