সংক্ষিপ্ত উত্তর:
Date in = new Date();
LocalDateTime ldt = LocalDateTime.ofInstant(in.toInstant(), ZoneId.systemDefault());
Date out = Date.from(ldt.atZone(ZoneId.systemDefault()).toInstant());
ব্যাখ্যা: ( সম্পর্কে এই প্রশ্নের উপর ভিত্তি করে LocalDate
)
এর নাম সত্ত্বেও, java.util.Date
সময়রেখায় একটি তাত্ক্ষণিক প্রতিনিধিত্ব করে, "তারিখ" নয়। বস্তুর মধ্যে সংরক্ষিত প্রকৃত তথ্য হ'ল long
1970-01-01T00: 00Z (1970 জিএমটি / ইউটিসি শুরুতে মধ্যরাত) সাল থেকে মিলিসেকেন্ডের একটি গণনা।
java.util.Date
জেএসআর -310 এর সমমানের শ্রেণি হ'ল Instant
, এইভাবে রূপান্তরটি সরবরাহের জন্য সুবিধাজনক পদ্ধতি রয়েছে:
Date input = new Date();
Instant instant = input.toInstant();
Date output = Date.from(instant);
একটি java.util.Date
উদাহরণ হিসেবে বলা যায় সময় অঞ্চল কোন ধারণা আছে। আপনি যদি কল toString()
করেন তবে এটি অদ্ভুত বলে মনে হতে পারে java.util.Date
কারণ toString
সময় অঞ্চলটির সাথে সম্পর্কিত the তবে সেই পদ্ধতিটি স্ট্রিং সরবরাহ করতে ফ্লাইতে জাওয়ার ডিফল্ট সময় অঞ্চলটি ব্যবহার করে। সময় অঞ্চলটি আসল অবস্থার অংশ নয় java.util.Date
।
একটিতে Instant
সময়-অঞ্চল সম্পর্কে কোনও তথ্য থাকে না। সুতরাং, একটি Instant
থেকে স্থানীয় তারিখ-সময় রূপান্তর করার জন্য একটি সময়-অঞ্চল নির্দিষ্ট করা প্রয়োজন। এটি ডিফল্ট অঞ্চল হতে পারে - ZoneId.systemDefault()
- বা এটি এমন একটি সময়-অঞ্চল হতে পারে যা আপনার অ্যাপ্লিকেশন নিয়ন্ত্রণ করে, যেমন ব্যবহারকারীর পছন্দসমূহ থেকে সময়-অঞ্চল। LocalDateTime
একটি সুবিধাজনক কারখানা পদ্ধতি রয়েছে যা তাত্ক্ষণিক এবং সময় অঞ্চল উভয়ই গ্রহণ করে:
Date in = new Date();
LocalDateTime ldt = LocalDateTime.ofInstant(in.toInstant(), ZoneId.systemDefault());
বিপরীতে, LocalDateTime
সময়-অঞ্চলটি atZone(ZoneId)
পদ্ধতিটি কল করে নির্দিষ্ট করা হয় । ZonedDateTime
তারপর সরাসরি পরিবর্তিত করা যায় Instant
:
LocalDateTime ldt = ...
ZonedDateTime zdt = ldt.atZone(ZoneId.systemDefault());
Date output = Date.from(zdt.toInstant());
নোট থেকে রুপান্তরের যে LocalDateTime
করতে ZonedDateTime
অপ্রত্যাশিত আচরণের পরিচয় করিয়ে দিতে সম্ভাবনা রয়েছে। এটি কারণ দিবালোক সংরক্ষণের কারণে প্রতিটি স্থানীয় তারিখের সময় উপস্থিত থাকে না। শরত্কালে / শরতে, স্থানীয় সময়রেখায় একটি ওভারল্যাপ থাকে যেখানে একই স্থানীয় তারিখ-সময় দু'বার ঘটে। বসন্তে, একটি ফাঁক আছে, যেখানে এক ঘন্টা অদৃশ্য হয়ে যায়। atZone(ZoneId)
রূপান্তরটি কী করবে তার আরও সংজ্ঞা পেতে জাভাদোক দেখুন ।
সংক্ষিপ্তসার, আপনি যদি java.util.Date
কোনও পথে একবার LocalDateTime
এবং java.util.Date
একবারে ভ্রমণ করেন তবে দিবালোক সংরক্ষণের সময়টির কারণে আপনি অন্যরকম তাত্ক্ষণিক ঘটনাটি শেষ করতে পারেন।
অতিরিক্ত তথ্য: আরও একটি পার্থক্য রয়েছে যা খুব পুরানো তারিখগুলিকে প্রভাবিত করে। java.util.Date
গ্রেগরিয়ান পরিবর্তে জুলিয়ান ক্যালেন্ডার ব্যবহার করার আগে তারিখগুলির সাথে 15 ই অক্টোবর 1582-এ পরিবর্তিত একটি ক্যালেন্ডার ব্যবহার করে। বিপরীতে, java.time.*
সর্বকালের জন্য আইএসও ক্যালেন্ডার সিস্টেম (গ্রেগরিয়ান সমতুল্য) ব্যবহার করে। বেশিরভাগ ব্যবহারের ক্ষেত্রে, আইএসও ক্যালেন্ডার সিস্টেমটি আপনি যা চান তা হ'ল, তবে 1582 সালের আগের তারিখগুলির তুলনা করার সময় আপনি অদ্ভুত প্রভাব দেখতে পাবেন।