मैं टाइप java.time.LocalDate
में बदलना चाहता हूं java.util.Date
। क्योंकि मैं तारीख निर्धारित करना चाहता हूं JDateChooser
। या कोई तारीख चयनकर्ता है जो java.time
तारीखों का समर्थन करता है?
मैं टाइप java.time.LocalDate
में बदलना चाहता हूं java.util.Date
। क्योंकि मैं तारीख निर्धारित करना चाहता हूं JDateChooser
। या कोई तारीख चयनकर्ता है जो java.time
तारीखों का समर्थन करता है?
जवाबों:
Date date = Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
यह मानता है कि आपकी तिथि चयनकर्ता तारीखों को तार में बदलने के लिए सिस्टम डिफ़ॉल्ट टाइमज़ोन का उपयोग करता है।
atStartOfDay()
, क्योंकि यह तारीख के मूल्य को बदल देता है, जैसा कि मैं इसे समझता हूं।
यहाँ एक उपयोगिता वर्ग है जिसका उपयोग मैं नई java.time
कक्षाओं को java.util.Date
वस्तुओं में बदलने और इसके विपरीत करने के लिए करता हूँ:
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 टिप्पणी के आधार पर संपादित।
ZoneId.systemDefault()
समस्याग्रस्त का उपयोग नहीं कर रहा है क्योंकि टाइमज़ोन वर्ष की लाश पर बदलते हैं। इसलिए यदि 01-जनवरी को मैं टाइमज़ोन -05: 00 (केंद्रीय) में हूं, लेकिन फिर 01-जुलाई को मैं टाइमज़ोन -06: 00 (केंद्रीय डेलाइट) में हूं, जो दिन के उजाले की बचत के कारण गलत परिणाम नहीं देगा। समय?
आप इस java.sql.Date.valueOf()
विधि का उपयोग कर सकते हैं :
Date date = java.sql.Date.valueOf(localDate);
यहाँ समय और समय क्षेत्र की जानकारी जोड़ने की आवश्यकता नहीं है क्योंकि वे अंतर्निहित रूप से लिए गए हैं।
देखें LocalDate to java.util.Date और इसके विपरीत सरलतम रूपांतरण?
java.sql.Date
डेटाबेस लेयर, JDBC, JPA के लिए है। वेब लेयर (या कोई भी क्लाइंट एप्लिकेशन) बिल्कुल किसी भी निर्भरता से मुक्त होना चाहिए java.sql.*
।
java.sql.Date
बस java.util.Date
अपने समय के साथ सेट है, 00:00:00
लेकिन डिजाइन परिप्रेक्ष्य में बिंदु यह है कि java.sql.*
सामने की परत के लिए इसका मतलब नहीं है जो क्लाइंट सर्वलेट्स / जेएसपी के साथ बातचीत करते हैं। java.util.Date
जावा पक्ष में और java.sql.Timestamp
या जो भी java.sql.*
JDBC पक्ष से लागू हो ।
java.sql.*
कक्षाएं एक अलग निर्भरता होगी।
java.time में टेम्पोरल इंटरफ़ेस है जिसका उपयोग आप अधिकांश समय वर्गों से त्वरित ऑब्जेक्ट बनाने के लिए कर सकते हैं। तत्काल एपोच में समय पर मिलीसेकंड का प्रतिनिधित्व करता है - अन्य सभी तिथियों और समय के लिए आधार संदर्भ।
हमें रूपांतरण करने के लिए समय और क्षेत्र के साथ दिनांक को एक ZonedDateTime में बदलना होगा:
LocalDate ldate = ...;
Instant instant = Instant.from(ldate.atStartOfDay(ZoneId.of("GMT")));
Date date = Date.from(instant);
एक java.util बनाने के लिए । java.time.ate से चुनें । आपको क्या करना है
कोड निम्नानुसार लग सकता है:
LocalDate localDate = LocalDate.now();
Date date = new Date(localDate.atStartOfDay(ZoneId.of("America/New_York")).toEpochSecond() * 1000);
toEpochSecond
से विरासत में मिली है java.time.chrono.ChronoZonedDateTime
। Docs.oracle.com/javase/8/docs/api/java/time/chrono/…
यह मेरे लिए काम करता है:
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--
कोटलिन समाधान:
1) इस एक्सटेंशन फ़ंक्शन को कहीं पेस्ट करें।
fun LocalDate.toDate(): Date = Date.from(this.atStartOfDay(ZoneId.systemDefault()).toInstant())
2) इसका इस्तेमाल करें, और इसे फिर कभी गूगल न करें।
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());
}
सरल
public Date convertFrom(LocalDate date) {
return java.sql.Timestamp.valueOf(date.atStartOfDay());
}
java.util.Date.from(localDate.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant());