Ben dönüştürmek istediğiniz java.time.LocalDateiçine java.util.Datetürü. Çünkü tarihi ayarlamak istiyorum JDateChooser. Veya java.timetarihleri destekleyen herhangi bir tarih seçici var mı?
Ben dönüştürmek istediğiniz java.time.LocalDateiçine java.util.Datetürü. Çünkü tarihi ayarlamak istiyorum JDateChooser. Veya java.timetarihleri 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.timesınıfları java.util.Datenesnelere 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.Dateveritabanı 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.Datesadece java.util.Datezamana göre ayarlanmış 00:00:00ancak 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.DateJava tarafında ve / java.sql.Timestampveya 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);
toEpochSecondmiras 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());