UTC में LocalDateTime में LocalDateTime कन्वर्ट करें।
LocalDateTime convertToUtc(LocalDateTime date) {
//do conversion
}
मैंने नेट पर सर्च किया। लेकिन हल नहीं निकला
UTC में LocalDateTime में LocalDateTime कन्वर्ट करें।
LocalDateTime convertToUtc(LocalDateTime date) {
//do conversion
}
मैंने नेट पर सर्च किया। लेकिन हल नहीं निकला
जवाबों:
मैं व्यक्तिगत रूप से पसंद करता हूं
LocalDateTime.now(ZoneOffset.UTC);
जैसा कि यह सबसे पठनीय विकल्प है।
और भी सरल तरीका है
LocalDateTime.now(Clock.systemUTC())
LocalDateTime में ज़ोन जानकारी शामिल नहीं है। ZonedDatetime करता है।
यदि आप LocalDateTime को UTC में बदलना चाहते हैं, तो आपको ZonedDateTime मुट्ठी से लपेटने की आवश्यकता है।
आप नीचे की तरह कन्वर्ट कर सकते हैं।
LocalDateTime ldt = LocalDateTime.now();
System.out.println(ldt.toLocalTime());
ZonedDateTime ldtZoned = ldt.atZone(ZoneId.systemDefault());
ZonedDateTime utcZoned = ldtZoned.withZoneSameInstant(ZoneId.of("UTC"));
System.out.println(utcZoned.toLocalTime());
ldt.atZone(ZoneId.systemDefault()).withZoneSameInstant(ZoneId.of("UTC"))
जबकि संक्षिप्त अभी भी पर्याप्त उदाहरण चर चर की जरूरत नहीं के लिए अर्थ बता देते हैं।
ZoneOffset.UTC
के लिए एक अच्छा प्रतिस्थापन हैZoneId.of("UTC")
OffsetDateTime
तुलना में अधिक उपयुक्त है ZonedDateTime
। का प्रयोग करें: OffsetDateTime.now( ZoneOffset.UTC )
याmyInstant.atOffset( ZoneOffset.UTC )
नीचे का उपयोग करें। यह स्थानीय डेटाटाइम लेता है और समय-सीमा का उपयोग करके इसे यूटीसी में परिवर्तित करता है। आपको इसे फ़ंक्शन बनाने की आवश्यकता नहीं है।
ZonedDateTime nowUTC = ZonedDateTime.now(ZoneOffset.UTC);
System.out.println(nowUTC.toString());
यदि आपको ZonedDateTime का LocalDateTime भाग प्राप्त करने की आवश्यकता है तो आप निम्न का उपयोग कर सकते हैं।
nowUTC.toLocalDateTime();
यहाँ एक स्थिर विधि है जिसका उपयोग मैं अपने आवेदन में यूटीसी समय को mysql में सम्मिलित करने के लिए करता हूँ क्योंकि मैं एक डिफ़ॉल्ट मान UTC_TIMESTAMP को एक डेटाइम कॉलम में नहीं जोड़ सकता ।
public static LocalDateTime getLocalDateTimeInUTC(){
ZonedDateTime nowUTC = ZonedDateTime.now(ZoneOffset.UTC);
return nowUTC.toLocalDateTime();
}
यहां एक साधारण सा यूटिलिटी क्लास दिया गया है, जिसका उपयोग आप स्थानीय तिथि समय को ज़ोन से ज़ोन में परिवर्तित करने के लिए कर सकते हैं, जिसमें एक यूटिलिटी विधि भी शामिल है जिसमें वर्तमान ज़ोन से वर्तमान ज़ोन को यूटीसी (मुख्य विधि के साथ बदलना) ताकि आप इसे चला सकें और परिणाम देख सकें एक साधारण परीक्षण):
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.time.ZonedDateTime;
public final class DateTimeUtil {
private DateTimeUtil() {
super();
}
public static void main(final String... args) {
final LocalDateTime now = LocalDateTime.now();
final LocalDateTime utc = DateTimeUtil.toUtc(now);
System.out.println("Now: " + now);
System.out.println("UTC: " + utc);
}
public static LocalDateTime toZone(final LocalDateTime time, final ZoneId fromZone, final ZoneId toZone) {
final ZonedDateTime zonedtime = time.atZone(fromZone);
final ZonedDateTime converted = zonedtime.withZoneSameInstant(toZone);
return converted.toLocalDateTime();
}
public static LocalDateTime toZone(final LocalDateTime time, final ZoneId toZone) {
return DateTimeUtil.toZone(time, ZoneId.systemDefault(), toZone);
}
public static LocalDateTime toUtc(final LocalDateTime time, final ZoneId fromZone) {
return DateTimeUtil.toZone(time, fromZone, ZoneOffset.UTC);
}
public static LocalDateTime toUtc(final LocalDateTime time) {
return DateTimeUtil.toUtc(time, ZoneId.systemDefault());
}
}
उत्तर और प्रश्न को देखते हुए, ऐसा लगता है कि प्रश्न को काफी संशोधित किया गया है। तो वर्तमान प्रश्न का उत्तर देने के लिए:
UTC में LocalDateTime में LocalDateTime कन्वर्ट करें।
LocalDateTime
समय-क्षेत्र के बारे में कोई भी जानकारी संग्रहीत नहीं करता है, यह मूल रूप से वर्ष, माह, दिन, घंटा, मिनट, दूसरा और छोटी इकाइयों के मूल्यों को रखता है। तो एक महत्वपूर्ण सवाल यह है कि मूल का समयक्षेत्र क्या है LocalDateTime
? यह यूटीसी पहले से ही हो सकता है, इसलिए कोई रूपांतरण नहीं किया जाना चाहिए।
यह देखते हुए कि आपने वैसे भी प्रश्न पूछा है, तो संभवतः आपका मतलब है कि मूल समय आपके सिस्टम-डिफ़ॉल्ट टाइमज़ोन में है और आप इसे यूटीसी में बदलना चाहते हैं। क्योंकि आमतौर पर एक LocalDateTime
ऑब्जेक्ट बनाया जाता है LocalDateTime.now()
जिसके उपयोग से सिस्टम-डिफ़ॉल्ट टाइमज़ोन में वर्तमान समय वापस आ जाता है। इस स्थिति में, रूपांतरण निम्नलिखित होगा:
LocalDateTime convertToUtc(LocalDateTime time) {
return time.atZone(ZoneId.systemDefault()).withZoneSameInstant(ZoneOffset.UTC).toLocalDateTime();
}
रूपांतरण प्रक्रिया का एक उदाहरण:
2019-02-25 11:39 // [time] original LocalDateTime without a timezone
2019-02-25 11:39 GMT+1 // [atZone] converted to ZonedDateTime (system timezone is Madrid)
2019-02-25 10:39 GMT // [withZoneSameInstant] converted to UTC, still as ZonedDateTime
2019-02-25 10:39 // [toLocalDateTime] losing the timezone information
किसी अन्य मामले में, जब आप स्पष्ट रूप से रूपांतरण करने के लिए समय के समय को निर्दिष्ट करते हैं, तो रूपांतरण निम्नलिखित होगा:
LocalDateTime convertToUtc(LocalDateTime time, ZoneId zone) {
return time.atZone(zone).withZoneSameInstant(ZoneOffset.UTC).toLocalDateTime();
}
रूपांतरण प्रक्रिया का एक उदाहरण:
2019-02-25 11:39 // [time] original LocalDateTime without a timezone
2019-02-25 11:39 GMT+2 // [atZone] converted to ZonedDateTime (zone is Europe/Tallinn)
2019-02-25 09:39 GMT // [withZoneSameInstant] converted to UTC, still as ZonedDateTime
2019-02-25 09:39 // [toLocalDateTime] losing the timezone information
atZone()
विधिatZone()
विधि का परिणाम उसके तर्क के रूप में पारित समय पर निर्भर करता है, क्योंकि यह डे-टाइम सेविंग टाइम (डीएसटी) सहित टाइमजोन के सभी नियमों को मानता है। उदाहरणों में, समय 25 फरवरी था, यूरोप में इसका मतलब है कि सर्दियों का समय (डीएसटी नहीं)।
यदि हम एक अलग तारीख का उपयोग करते हैं, तो मान लें कि पिछले वर्ष से 25 अगस्त, परिणाम अलग होगा, डीएसटी पर विचार:
2018-08-25 11:39 // [time] original LocalDateTime without a timezone
2018-08-25 11:39 GMT+3 // [atZone] converted to ZonedDateTime (zone is Europe/Tallinn)
2018-08-25 08:39 GMT // [withZoneSameInstant] converted to UTC, still as ZonedDateTime
2018-08-25 08:39 // [toLocalDateTime] losing the timezone information
GMT का समय नहीं बदलता है। इसलिए अन्य timezones में ऑफसेट समायोजित कर रहे हैं। इस उदाहरण में, एस्टोनिया का ग्रीष्मकालीन समय GMT + 3 और सर्दियों का समय GMT + 2 है।
इसके अलावा, यदि आप घड़ियों को बदलने के एक घंटे के भीतर एक समय निर्दिष्ट करते हैं। जैसे एस्टोनिया के लिए 28 अक्टूबर, 2018 03:30, इसका मतलब दो अलग-अलग समय हो सकता है:
2018-10-28 03:30 GMT+3 // summer time [UTC 2018-10-28 00:30]
2018-10-28 04:00 GMT+3 // clocks are turned back 1 hour [UTC 2018-10-28 01:00]
2018-10-28 03:00 GMT+2 // same as above [UTC 2018-10-28 01:00]
2018-10-28 03:30 GMT+2 // winter time [UTC 2018-10-28 01:30]
मैन्युअल रूप से ऑफ़सेट निर्दिष्ट किए बिना (GMT + 2 या GMT + 3), 03:30
समयक्षेत्र के लिए समयEurope/Tallinn
का अर्थ दो अलग-अलग UTC बार, और दो अलग-अलग ऑफसेट हो सकते हैं।
जैसा कि आप देख सकते हैं, अंतिम परिणाम एक तर्क के रूप में पारित होने के समय के समय पर निर्भर करता है। क्योंकि समयक्षेत्र को LocalDateTime
ऑब्जेक्ट से नहीं निकाला जा सकता है , इसलिए आपको यह जानना होगा कि इसे UTC में बदलने के लिए आपके पास कौन सा टाइमज़ोन है।
LocalDateTime does not store any information about the time-zone, it just basically holds the values of year, month, day, hour, minute, second, and smaller units.
tldr: ऐसा करने का कोई तरीका नहीं है; यदि आप ऐसा करने का प्रयास कर रहे हैं, तो आपको लोकलडेट टाइम मिल जाएगा गलत है।
इसका कारण है कि LocalDateTime बाद ज़ोन को रिकॉर्ड नहीं करता है। आप किसी विशिष्ट समय क्षेत्र के आधार पर समय क्षेत्र के बिना दिनांक समय को किसी अन्य दिनांक समय में परिवर्तित नहीं कर सकते।
तथ्य की बात के रूप में, LocalDateTime.now () को कभी भी उत्पादन कोड में नहीं बुलाया जाना चाहिए जब तक कि आपका उद्देश्य यादृच्छिक परिणाम प्राप्त नहीं कर रहा हो। जब आप उस तरह एक LocalDateTime इंस्टेंस का निर्माण करते हैं, तो इस आवृत्ति में केवल सर्वर के टाइम ज़ोन के आधार पर तारीख का समय होता है, जिसका अर्थ है कि यह कोड अलग-अलग परिणाम उत्पन्न करेगा यदि यह किसी भिन्न समय क्षेत्र कॉन्फ़िगरेशन के साथ सर्वर चला रहा हो।
LocalDateTime तारीख गणना को सरल बना सकता है। यदि आप वास्तविक रूप से उपयोग करने योग्य डेटा समय चाहते हैं, तो ZonedDateTime या OffsetDateTime का उपयोग करें : https://docs.oracle.com/javase/8/docs/api/java/time/OffsetDateTime.html ।
इस विधि का प्रयोग करके देखें।
अपने को परिवर्तित LocalDateTime
करने के लिए ZonedDateTime
का उपयोग करके की विधि और सिस्टम सामान्य समय क्षेत्र से गुजरती हैं या आप उपयोग कर सकते ZoneId की तरह अपने क्षेत्र केZoneId.of("Australia/Sydney");
LocalDateTime convertToUtc(LocalDateTime dateTime) {
ZonedDateTime dateTimeInMyZone = ZonedDateTime.
of(dateTime, ZoneId.systemDefault());
return dateTimeInMyZone
.withZoneSameInstant(ZoneOffset.UTC)
.toLocalDateTime();
}
अपने ज़ोन के स्थानीय दिनांक समय के उपयोग पर वापस जाने के लिए:
LocalDateTime convertFromUtc(LocalDateTime utcDateTime){
return ZonedDateTime.
of(utcDateTime, ZoneId.of("UTC"))
.toOffsetDateTime()
.atZoneSameInstant(ZoneId.systemDefault())
.toLocalDateTime();
}
आप कुछ ऐसा करने वाले सहायक को लागू कर सकते हैं:
public static LocalDateTime convertUTCFRtoUTCZ(LocalDateTime dateTime) {
ZoneId fr = ZoneId.of("Europe/Paris");
ZoneId utcZ = ZoneId.of("Z");
ZonedDateTime frZonedTime = ZonedDateTime.of(dateTime, fr);
ZonedDateTime utcZonedTime = frZonedTime.withZoneSameInstant(utcZ);
return utcZonedTime.toLocalDateTime();
}
public static String convertFromGmtToLocal(String gmtDtStr, String dtFormat, TimeZone lclTimeZone) throws Exception{
if (gmtDtStr == null || gmtDtStr.trim().equals("")) return null;
SimpleDateFormat format = new SimpleDateFormat(dtFormat);
format.setTimeZone(getGMTTimeZone());
Date dt = format.parse(gmtDtStr);
format.setTimeZone(lclTimeZone);
return
format.format (डीटी); }
SimpleDateFormat
वर्ग का उपयोग करने के लिए युवाओं को न सिखाएं । कम से कम पहले विकल्प के रूप में नहीं। और बिना किसी आरक्षण के नहीं। आज हमारे पास java.time
आधुनिक जावा तिथि और समय एपीआई और इसके बहुत बेहतर हैं DateTimeFormatter
।