Ben dönüştürmek istediğiniz java.time.LocalDate
içine java.util.Date
türü. Çünkü tarihi ayarlamak istiyorum JDateChooser
. Veya java.time
tarihleri destekleyen herhangi bir tarih seçici var mı?
Ben dönüştürmek istediğiniz java.time.LocalDate
içine java.util.Date
türü. Çünkü tarihi ayarlamak istiyorum JDateChooser
. Veya java.time
tarihleri destekleyen herhangi bir tarih seçici var mı?
Yanıtlar:
Date date = Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
Tarih seçicinizin tarihleri dizelere dönüştürmek için sistem varsayılan saat dilimini kullandığını varsayar.
atStartOfDay()
Anladığım gibi, tarihin değerini değiştirdiğinden kaçınmak mümkün mü ?
İşte yeni java.time
sınıfları java.util.Date
nesnelere dönüştürmek için kullandığım bir yardımcı sınıf :
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Date;
public class DateUtils {
public static Date asDate(LocalDate localDate) {
return Date.from(localDate.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant());
}
public static Date asDate(LocalDateTime localDateTime) {
return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
}
public static LocalDate asLocalDate(Date date) {
return Instant.ofEpochMilli(date.getTime()).atZone(ZoneId.systemDefault()).toLocalDate();
}
public static LocalDateTime asLocalDateTime(Date date) {
return Instant.ofEpochMilli(date.getTime()).atZone(ZoneId.systemDefault()).toLocalDateTime();
}
}
@Oliv yorumuna göre düzenlendi.
ZoneId.systemDefault()
Sorunlu değil çünkü zaman kuşakları yıl boyunca değişiyor. 01-Ocak günü saat diliminde -05: 00 (ortada), ancak 01-Temmuz günü saat diliminde -06: 00 (merkezi gün ışığı) gün ışığından tasarruf nedeniyle yanlış sonuçlara neden olmazsa zaman?
java.sql.Date.valueOf()
Yöntemi şu şekilde kullanabilirsiniz :
Date date = java.sql.Date.valueOf(localDate);
Zaman ve saat dilimi bilgilerinin buraya eklenmesine gerek yoktur, çünkü bunlar dolaylı olarak alınır.
Bkz. LocalDate - java.util.Date ve tersi en basit dönüşüm?
java.sql.Date
veritabanı katmanı JDBC, JPA içindir. Web katmanı (veya herhangi bir istemci uygulaması) kesinlikle herhangi bir bağımlılık içermemelidir java.sql.*
.
java.sql.Date
sadece java.util.Date
zamana göre ayarlanmış 00:00:00
ancak tasarım perspektifindeki nokta, java.sql.*
istemcilerin Servlets / JSP gibi etkileşimde bulunduğu bir ön katman için tasarlanmamış olmasıdır. java.util.Date
Java tarafında ve / java.sql.Timestamp
veya java.sql.*
JDBC tarafında geçerli olan her şeyi .
java.sql.*
sınıflar ayrı bir bağımlılık olacaktır.
java.time, çoğu zaman sınıfından Instant nesneleri oluşturmak için kullanabileceğiniz Geçici arayüze sahiptir. Anında Arama, diğer tüm tarihler ve saatler için temel referans olan Epoch'taki zaman çizelgesinde milisaniyeyi temsil eder.
Dönüşümü yapmak için Tarihi Saat ve Bölge içeren bir ZonedDateTime değerine dönüştürmemiz gerekir:
LocalDate ldate = ...;
Instant instant = Instant.from(ldate.atStartOfDay(ZoneId.of("GMT")));
Date date = Date.from(instant);
Bir java.time.LocalDate öğesinden bir java.util.Date oluşturmak için ,
Kod aşağıdaki gibi görünebilir:
LocalDate localDate = LocalDate.now();
Date date = new Date(localDate.atStartOfDay(ZoneId.of("America/New_York")).toEpochSecond() * 1000);
toEpochSecond
miras alınır java.time.chrono.ChronoZonedDateTime
. Bkz. Docs.oracle.com/javase/8/docs/api/java/time/chrono/…
Bu benim için çalışıyor:
java.util.Date d = new SimpleDateFormat("yyyy-MM-dd").parse(localDate.toString());
https://docs.oracle.com/javase/8/docs/api/java/time/LocalDate.html#toString--
Kotlin Çözümü:
1) Bu uzantı işlevini bir yere yapıştırın.
fun LocalDate.toDate(): Date = Date.from(this.atStartOfDay(ZoneId.systemDefault()).toInstant())
2) Kullanın ve bunu bir daha google.
val myDate = myLocalDate.toDate()
public static Date convertToTimeZone(Date date, String tzFrom, String tzTo) {
return Date.from(LocalDateTime.ofInstant(date.toInstant(), ZoneId.of(tzTo)).atZone(ZoneId.of(tzFrom)).toInstant());
}
Basit
public Date convertFrom(LocalDate date) {
return java.sql.Timestamp.valueOf(date.atStartOfDay());
}
java.util.Date.from(localDate.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant());