2015-04-20 13 views
27

java.sql.Date ve LocalDate (Java8) arasında dönüştürmenin doğru yolu nedir?LocalDate ve sql.Date arasında dönüştürme

+3

soruya kendisinde ifadeler de özellikle java.sql dönüşüm arayan/kişiler için iyidir Diğer soru benzer bir cevabı olsa bile java.time.LocalDate için geçerlidir. –

cevap

51

java.sql.Date'un Java 8 sürümü (ve üstü), toLocalDate ve valueOf(LocalDate) dahil LocalDate desteği için oluşturulmuştur.

sqlDate.toLocalDate(); 

Zaman dilimleri:

LocalDate tipi depolar hiçbir zaman

Eğer

java.sql.Date.valueOf(localDate); 

kullanabilirsiniz Ve java.sql.DateLocalDate dönüştüğünde için java.sql.Date için LocalDate den dönüştürmek için bölge bilgisi, 0 ikenyapar. Bu nedenle, yukarıdaki dönüşümleri kullanırken, sonuçlar sistemin varsayılan saat dilimine (yorumlarda belirtildiği gibi) bağlıdır. Eğer varsayılan saat diliminde güvenmek istemiyorsanız

, aşağıdaki dönüşüm kullanabilirsiniz:

Date now = new Date(); 
LocalDate current = now.toInstant() 
         .atZone(ZoneId.systemDefault()) // Specify the correct timezone 
         .toLocalDate(); 
+4

Not: Bu, tarihi yorumlamak için sistem varsayılan saat dilimini kullanır; bu, istediğiniz gibi olabilir veya olmayabilir. Genellikle saat dilimini açıkça belirtmek tercih edilir! – marc82ch

+0

@ marc82ch A ['LocalDate'] (https://docs.oracle.com/javase/8/docs/api/java/time/LocalDate.html) açıkça bir saat dilimine sahip değildir. Birini nasıl belirleyeceğinize ve bunun nasıl etkileyeceğine dair bazı ayrıntılar ekleyebilir misiniz? – beldaz

+0

@beldaz Yanılmış olabilirim, aslında internals bilmiyorum, ama bir java.sql.Date epoch (UTC) beri uzun bir zaman damgası tarafından temsil olduğunu düşünüyorum. Bu yüzden, DB DATE alanından okurken, onu uzun süre göstermek için yorumlanmalıdır (sürücü tarafından). Java.sql.Date'in java.util.Date'den miras aldığını unutmayın. Yani temel olarak Java 8 teriminde bir Anında ve LocalDate'e dönüştürmek bir zaman dilimi gerektirir. Ancak, JDBC sürücüsü ve kodunuzun aynı varsayılan saat dilimini kullandığı sürece, önemli değil. – marc82ch

İlgili konular