टाइमस्टैम्प
Date
को बढ़ाता है नैनोसेकंड सटीकता प्रदान करने के लिए। न तो Date
न ही Timestamp
एक विशिष्ट समय क्षेत्र को ZoneDateTime
. के रूप में संदर्भित करने के लिए डिज़ाइन किए गए हैं ।
अगर आपको ZonedDateTime
convert कन्वर्ट करने की आवश्यकता है -> Timestamp
आपको टाइमज़ोन/ऑफ़सेट जानकारी को त्यागना होगा। उदा.
LocalDateTime withoutTimezone = zoneDateTime.toLocalDateTime();
Timestamp timestamp = Timestamp.valueOf(withoutTimezone));
और Timestamp
. में कनवर्ट करने के लिए -> ZonedDateTime
आपको एक ऑफ़सेट निर्दिष्ट करने की आवश्यकता है:
LocalDateTime withoutTimezone = sqlTimestamp.toLocalDateTime();
ZonedDateTime withTimezone = withoutTimezone.atZone(ZoneId.of("+03:00"));
या समय क्षेत्र:
ZonedDateTime withTimezone = withoutTimezone.atZone(ZoneId.of("Europe/Paris"));
यदि आपका इरादा ZonedDateTime
. को सहेजना है डेटाबेस में वेरिएबल्स और वहां निर्दिष्ट विभिन्न टाइमज़ोन को संरक्षित करते हैं, मैं आपके डेटाबेस को तदनुसार डिजाइन करने की सलाह देता हूं। सुझाव:
- एक प्रकार के कॉलम का उपयोग करें
DATETIME
LocalDateTime
save को सेव करने के लिए और एकVARCHAR
"Europe/Paris"
. जैसे समय क्षेत्र को सहेजना या एकSMALLINT
मिनटों में ऑफ़सेट सहेजना. ZonedDateTime
कन्वर्ट करें एकString
. के लिए और एकVARCHAR
. में सेव करें कॉलम जैसे"2017-05-16T14:12:48.983682+01:00[Europe/London]"
. फिर आपको डेटाबेस से पढ़ते समय इसे पार्स करना होगा।