लोकलडेट को इंस्टेंट में कैसे बदलें?


106

मैं जावा 8 के नए डेटाइम एपीआई के साथ काम करता हूं।

लोकलडेट को इंस्टेंट में कैसे बदलें? मुझे इसके साथ एक अपवाद मिलता है

LocalDate date = LocalDate.of(2012, 2, 2);
Instant instant = Instant.from(date);

और मुझे समझ में क्यों नहीं आता।


क्योंकि एक LocalDateसमय शामिल नहीं है।
ऑरेंजडॉग

जवाबों:


98

Instantवर्ग समय-रेखा पर एक तात्कालिक बिंदु का प्रतिनिधित्व करता। LocalDateकिसी समय-क्षेत्र की आवश्यकता से रूपांतरण । कुछ अन्य दिनांक और समय पुस्तकालयों के विपरीत, JSR-310 स्वचालित रूप से आपके लिए समय-क्षेत्र का चयन नहीं करेगा, इसलिए आपको इसे प्रदान करना होगा।

LocalDate date = LocalDate.now();
Instant instant = date.atStartOfDay(ZoneId.systemDefault()).toInstant();

यह उदाहरण ZoneId.systemDefault()रूपांतरण करने के लिए JVM - - के डिफ़ॉल्ट समय-क्षेत्र का उपयोग करता है । संबंधित प्रश्न के लंबे जवाब के लिए यहां देखें ।


अद्यतन: स्वीकृत उत्तर का उपयोग करता है LocalDateTime::toInstant(ZoneOffset)जो केवल स्वीकार करता है ZoneOffset। इस उत्तर का उपयोग करता है LocalDate::atStartOfDay(ZoneId)जो किसी भी स्वीकार करता है ZoneId। जैसे, यह उत्तर आम तौर पर अधिक उपयोगी है (और शायद स्वीकार किया जाना चाहिए)।

पुनश्च। मैं एपीआई का मुख्य लेखक था


1
मुझे लगता है कि यह स्वीकृत उत्तर की तुलना में अधिक उपयोगी है क्योंकि जोनआईड (टाइमज़ोन) पैरामीटर है न कि ज़ोनऑफ़सेट (यूटीसी से स्थानांतरित किए गए घंटे, जो गर्मियों / सर्दियों में एक समयक्षेत्र के लिए बदल सकता है)।
वूर्ज

1
एक इकाई परीक्षण में मैं लिख रहा हूं, मेरे पास एक लोकलडेट है, जो एक com.google.protobuf.Timestamp में परिवर्तित होता है और फिर एक इंस्टैंट, दोनों तरीकों से वापस लोकडडेट में मैप किया जाता है। दृष्टिकोण का उपयोग करते हुए स्वीकृत उत्तर बताता है, मुझे बदले में अपेक्षित लोकलडेट मिलता है, लेकिन इस दृष्टिकोण का उपयोग करने से मुझे "आज" के बजाय "कल" ​​वापस मिल जाता है। मेरा
टाइमजोन

127

इसे तत्काल में परिवर्तित करने के लिए आपके पास एक LocalDateTime उदाहरण होना चाहिए, जैसे:

LocalDate.now().atStartOfDay().toInstant(ZoneOffset.UTC)

बहुत बहुत धन्यवाद। मैं अब समझता हूं कि मुझे इंस्टेंट पाने के लिए टाइम ज़ोन निर्दिष्ट करना होगा।
user1643352
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.