TL; ড
myUtilDate.toInstant() // Convert `java.util.Date` to `Instant`.
.atOffset( ZoneOffset.UTC ) // Transform `Instant` to `OffsetDateTime`.
.format( DateTimeFormatter.ISO_LOCAL_DATE_TIME ) // Generate a String.
.replace( "T" , " " ) // Put a SPACE in the middle.
2014-11-14 14:05:09
java.time
আধুনিক উপায়টি জাভা.টাইম ক্লাসগুলির সাথে রয়েছে যা এখন সমস্যাযুক্ত পুরানো উত্তরাধিকারের তারিখ-সময় ক্লাসগুলিকে সাপ্লান্ট করে।
প্রথমে আপনার রূপান্তর java.util.Date
একটি থেকেInstant
। Instant
ক্লাসে টাইমলাইনে একটি মুহূর্ত প্রতিনিধিত্ব করে ইউটিসি একটি রেজোলিউশনে ন্যানোসেকেন্ড (একসঙ্গে নয় জন (9) একটি দশমিক ভগ্নাংশের সংখ্যায় পর্যবসিত)।
জাভা.টাইমে / থেকে রূপান্তরগুলি পুরানো শ্রেণিতে যুক্ত হওয়া নতুন পদ্ধতি দ্বারা সম্পাদিত হয়।
Instant instant = myUtilDate.toInstant();
আপনার java.util.Date
এবং উভয়ই ইউটিসিjava.time.Instant
- তে আছেন । আপনি যদি ইউটিসি হিসাবে তারিখ এবং সময় দেখতে চান তবে তাই হয়ে যান। toString
স্ট্যান্ডার্ডে একটি স্ট্রিং উত্পন্ন করতে কল করুন আইএসও 8601 ফর্ম্যাটে ।
String output = instant.toString();
2014-11-14T14: 05: 09Z
অন্যান্য ফর্ম্যাটগুলির জন্য, আপনার Instant
আরও নমনীয় মধ্যে রূপান্তর করা প্রয়োজনOffsetDateTime
।
OffsetDateTime odt = instant.atOffset( ZoneOffset.UTC );
odt.toString (): 2020-05-01T21: 25: 35.957Z
ওটা দেখ আইডিয়নে ডটকমে সরাসরি কোডটি চালানো ।
আপনার পছন্দসই বিন্যাসে একটি স্ট্রিং পেতে, একটি নির্দিষ্ট করুন DateTimeFormatter
। আপনি একটি কাস্টম ফর্ম্যাট নির্দিষ্ট করতে পারে। তবে আমি পূর্বনির্ধারিত বিন্যাসগুলির একটি ( ISO_LOCAL_DATE_TIME
এবং) ব্যবহার করব T
এবং এর আউটপুটটিতে একটি স্পেস দিয়ে প্রতিস্থাপন করব ।
String output = odt.format( DateTimeFormatter.ISO_LOCAL_DATE_TIME )
.replace( "T" , " " );
2014-11-14 14:05:09
যাইহোক আমি এই ধরণের ফর্ম্যাটটির প্রস্তাব দিচ্ছি না যেখানে আপনি উদ্দেশ্যমূলকভাবে হারাবেন ইউটিসি বা টাইম জোনের তথ্য অফসেট থেকে । সেই স্ট্রিংয়ের তারিখ-সময় মানের অর্থ হিসাবে অস্পষ্টতা তৈরি করে।
ডেটা ক্ষতি থেকেও সাবধান থাকুন, যেহেতু আপনার স্ট্রিংয়ের তারিখ-সময়ের মান উপস্থাপনে যে কোনও ভগ্নাংশ দ্বিতীয়টিকে উপেক্ষা করা হচ্ছে (কার্যকরভাবে কাটা)।
কিছু নির্দিষ্ট অঞ্চলের প্রাচীর-ঘড়ির সময় লেন্সের মাধ্যমে একই মুহূর্তটি দেখতে , একটি ZoneId
পেতে একটি প্রয়োগ করুন ZonedDateTime
।
ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = instant.atZone( z );
zdt.toString (): 2014-11-14T14: 05: 09-05: 00 [আমেরিকা / মন্ট্রিল]
একটি বিন্যস্ত স্ট্রিং নির্মাণের জন্য উপরের মতো একই কাজ কিন্তু প্রতিস্থাপন odt
সঙ্গে zdt
।
String output = zdt.format( DateTimeFormatter.ISO_LOCAL_DATE_TIME )
.replace( "T" , " " );
2014-11-14 14:05:09
যদি এই কোডটি বেশ বড় সংখ্যক বার কার্যকর করা হয় তবে আপনি কিছুটা দক্ষ হয়ে উঠতে এবং কলটি এড়াতে চাইতে পারেন String::replace
। সেই কলটি বাদ দেওয়া আপনার কোডকে আরও খাটো করে তোলে। যদি ইচ্ছা হয়, আপনার নিজের DateTimeFormatter
অবজেক্টে আপনার নিজস্ব ফর্ম্যাটিং প্যাটার্ন নির্দিষ্ট করুন । পুনরায় ব্যবহারের জন্য ধ্রুবক বা সদস্য হিসাবে এই উদাহরণটিকে ক্যাশে করুন।
DateTimeFormatter f = DateTimeFormatter.ofPattern( "uuuu-MM-dd HH:mm:ss" ); // Data-loss: Dropping any fractional second.
দৃষ্টান্তটি পাস করে সেই ফর্ম্যাটারটি প্রয়োগ করুন।
String output = zdt.format( f );
জাভা.টাইম সম্পর্কে
Java.time ফ্রেমওয়ার্ক জাভা 8 এবং পরে পাতাটা করা হয়। এই ক্লাসগুলি , & java.util.Date
, এর মতো সমস্যাযুক্ত পুরানো তারিখের সময় ক্লাসগুলিকে সহায়তা করে ।.Calendar
java.text.SimpleDateFormat
Joda-টাইম প্রকল্প, এখন রক্ষণাবেক্ষণ মোড , স্থানান্তরণ java.time করার পরামর্শ দেয়।
আরও জানতে, ওরাকল টিউটোরিয়ালটি দেখুন । এবং অনেক উদাহরণ এবং ব্যাখ্যার জন্য স্ট্যাক ওভারফ্লো অনুসন্ধান করুন।
Java.time কার্যকারিতা অনেক জাভা 6 ও 7 ব্যাক বৈশিষ্ট্যসমূহ নিয়ে আসা হয় ThreeTen-গুলো পুরনো এবং আরও অভিযোজিত অ্যান্ড্রয়েড মধ্যে ThreeTenABP (দেখুন কিভাবে ব্যবহার ... )।
ThreeTen-অতিরিক্ত প্রকল্প অতিরিক্ত শ্রেণীর সাথে java.time প্রসারিত করে। এই প্রকল্পটি জাভা.টাইমে সম্ভাব্য ভবিষ্যতের সংযোজনগুলির একটি প্রমাণযোগ্য ক্ষেত্র।