TL; ড
একটি স্ট্রিং থেকে… পার্স করা হয়েছে ... সময় অঞ্চল নির্দিষ্ট করা হয়নি ... আমি একটি নির্দিষ্ট সময় অঞ্চল নির্ধারণ করতে চাই
LocalDateTime.parse( "2018-01-23T01:23:45.123456789" ) // Parse string, lacking an offset-from-UTC and lacking a time zone, as a `LocalDateTime`.
.atZone( ZoneId.of( "Africa/Tunis" ) ) // Assign the time zone for which you are certain this date-time was intended. Instantiates a `ZonedDateTime` object.
জুন তারিখের সময় অঞ্চল নেই
অন্যান্য সঠিক উত্তরের বিবৃত হিসেবে, একটি java.util.Date কোন সময় জোন হয়েছে † । এটি ইউটিসি / জিএমটি (কোনও টাইম জোন অফসেট নয়) উপস্থাপন করে। খুব বিভ্রান্তিকর কারণ এর toString
স্ট্রিং প্রতিনিধিত্ব করার সময় এর পদ্ধতিটি JVM- র ডিফল্ট সময় অঞ্চল প্রয়োগ করে।
জুডেট এড়িয়ে চলুন
এটি এবং অন্যান্য অনেক কারণে, আপনার বিল্ট-ইন java.util. তারিখ এবং .ক্যালেন্ডার এবং java.text.SimpleDate Format ব্যবহার এড়ানো উচিত। তারা কুখ্যাত ঝামেলা হয়।
পরিবর্তে জাভা 8 এর সাথে বান্ডিলযুক্ত জাভা.টাইম প্যাকেজটি ব্যবহার করুন ।
java.time
জাভা.টাইম ক্লাসগুলি তিনটি উপায়ে টাইমলাইনে একটি মুহুর্তের প্রতিনিধিত্ব করতে পারে:
- ইউটিসি (
Instant
)
- অফসেট সহ (
OffsetDateTime
সাথে ZoneOffset
)
- একটি সময় অঞ্চল সহ (
ZonedDateTime
সাথে ZoneId
)
Instant
ইন java.time , মৌলিক বিল্ডিং ব্লক হয় Instant
, ইউটিসি সময় লাইনে একটি মুহূর্ত। Instant
আপনার ব্যবসায়িক যুক্তির বেশিরভাগ ক্ষেত্রে অবজেক্টগুলি ব্যবহার করুন ।
Instant instant = Instant.now();
OffsetDateTime
কিছু লোকালের প্রাচীর-ঘড়ির সময়গুলিতে সামঞ্জস্য করতে অফসেট-থেকে-ইউটিসি প্রয়োগ করুন ।
একটি ZoneOffset
পেতে একটি প্রয়োগ করুন OffsetDateTime
।
ZoneOffset zoneOffset = ZoneOffset.of( "-04:00" );
OffsetDateTime odt = OffsetDateTime.ofInstant( instant , zoneOffset );
ZonedDateTime
একটি টাইম জোন প্রয়োগ করা আরও ভাল , একটি অফসেট প্লাস এবং ডায়ালাইট সেভিং টাইম (ডিএসটি) এর মতো অসঙ্গতিগুলি পরিচালনা করার নিয়ম ।
একটি আবেদন ZoneId
একটি থেকে Instant
একটি পেতে ZonedDateTime
। সর্বদা যথাযথ টাইম জোনের নাম উল্লেখ করুন । কখনও যেমন 3-4 বর্ণমালা ব্যবহার EST
বা IST
যে তন্ন তন্ন অনন্য কিংবা মান আছে।
ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );
LocalDateTime
যদি ইনপুট স্ট্রিংটিতে অফসেট বা জোনের কোনও সূচকের অভাব হয় তবে একটি হিসাবে পার্স করুন LocalDateTime
।
আপনি যদি নির্দিষ্ট সময় অঞ্চল সম্পর্কে নিশ্চিত হন তবে একটি ZoneId
উত্পাদন করার জন্য একটি বরাদ্দ করুন ZonedDateTime
। উপরে tl; dr বিভাগে কোডের উদাহরণটি দেখুন ।
ফর্ম্যাট স্ট্রিংস
toString
মানক আইএসও 8601 ফর্ম্যাটে তারিখ-সময় মান উপস্থাপন করে একটি স্ট্রিং উত্পন্ন করতে এই তিনটি শ্রেণীর যে কোনও একটিতে পদ্ধতি কল করুন । ZonedDateTime
বর্গ বন্ধনী সময় অঞ্চল নামে সংযোজন করে প্রমিত বিন্যাস প্রসারিত করে।
String outputInstant = instant.toString(); // Ex: 2011-12-03T10:15:30Z
String outputOdt = odt.toString(); // Ex: 2007-12-03T10:15:30+01:00
String outputZdt = zdt.toString(); // Ex: 2007-12-03T10:15:30+01:00[Europe/Paris]
অন্যান্য ফর্ম্যাটগুলির জন্য DateTimeFormatter
ক্লাস ব্যবহার করুন । সাধারণত শ্রেণীর ব্যবহারকারীর প্রত্যাশিত মানব ভাষা এবং সাংস্কৃতিক নিয়ম ব্যবহার করে স্থানীয় ফর্ম্যাট তৈরি করতে দেওয়া সর্বোত্তম। অথবা আপনি একটি নির্দিষ্ট ফর্ম্যাট নির্দিষ্ট করতে পারেন।
জাভা.টাইম সম্পর্কে
Java.time ফ্রেমওয়ার্ক জাভা 8 এবং পরে পাতাটা করা হয়। এই ক্লাসগুলি , & , এর মতো সমস্যাযুক্ত পুরানো উত্তরাধিকারের তারিখ-সময়ের ক্লাসগুলিকে সহায়তা করে ।java.util.Date
Calendar
SimpleDateFormat
Joda-টাইম প্রকল্প, এখন রক্ষণাবেক্ষণ মোড , মাইগ্রেশনে উপদেশ java.time ক্লাস।
আরও জানতে, ওরাকল টিউটোরিয়াল দেখুন । এবং অনেক উদাহরণ এবং ব্যাখ্যার জন্য স্ট্যাক ওভারফ্লো অনুসন্ধান করুন। স্পেসিফিকেশনটি জেএসআর 310 ।
আপনি আপনার ডাটাবেসের সাথে জাভা.টাইম অবজেক্টগুলি সরাসরি বিনিময় করতে পারেন । জেডিবিসি ৪.২ বা তারপরের সাথে অনুগত একটি জেডিবিসি ড্রাইভার ব্যবহার করুন । স্ট্রিংগুলির দরকার নেই, ক্লাসের প্রয়োজন নেই ।java.sql.*
জাভা.টাইম ক্লাস কোথায় পাবেন?
ThreeTen-অতিরিক্ত প্রকল্প অতিরিক্ত শ্রেণীর সাথে java.time প্রসারিত করে। এই প্রকল্পটি জাভা.টাইমে সম্ভাব্য ভবিষ্যতের সংযোজনগুলির একটি প্রমাণযোগ্য ক্ষেত্র। আপনি এখানে কিছু দরকারী শ্রেণীর যেমন খুঁজে পেতে পারেন Interval
, YearWeek
, YearQuarter
, এবং আরো ।
Joda-টাইম
যদিও Joda-টাইম এখনও সক্রিয়ভাবে রক্ষা করা হয়, তার প্রস্তুতকারকদের আমাদের বলেছেন java.time এ স্থানান্তরিত হতে যত তাড়াতাড়ি সুবিধাজনক। আমি এই বিভাগটি রেফারেন্স হিসাবে অক্ষত রেখেছি, তবে আমি java.time
পরিবর্তে উপরের অংশটি ব্যবহার করার পরামর্শ দিচ্ছি ।
ইন Joda-টাইম , একটি তারিখ-সময় বস্তু ( DateTime
) নিশ্চয় তার নির্ধারিত সময়ের অঞ্চল জানে। এর অর্থ ইউটিসি থেকে অফসেট এবং সেই সময় অঞ্চলের ডায়ালাইট সেভিং টাইম (ডিএসটি) এবং এই জাতীয় অন্যান্য অসঙ্গতিগুলির নিয়ম এবং ইতিহাস from
String input = "2014-01-02T03:04:05";
DateTimeZone timeZone = DateTimeZone.forID( "Asia/Kolkata" );
DateTime dateTimeIndia = new DateTime( input, timeZone );
DateTime dateTimeUtcGmt = dateTimeIndia.withZone( DateTimeZone.UTC );
আইএসও 8601 ফর্ম্যাটে toString
একটি স্ট্রিং উত্পন্ন করতে পদ্ধতিটি কল করুন ।
String output = dateTimeIndia.toString();
জোদা-টাইম অন্যান্য স্ট্রিং ফর্ম্যাটগুলির সমস্ত ধরণের উত্সর্গের জন্য সমৃদ্ধ ক্ষমতা সরবরাহ করে।
প্রয়োজনে, আপনি জোডা-টাইম ডেটটাইম থেকে জাভা.ইউটি.এল.তে রূপান্তর করতে পারেন।
Java.util.Date date = dateTimeIndia.toDate();
"জোডা তারিখ" এর জন্য অনুসন্ধান স্ট্যাক ওভারফ্লো আরও অনেক উদাহরণ খুঁজে পেতে, কয়েকটি বেশ বিস্তারিত।
† বাস্তবিক সেখানে হয় কোন সময় জোন একটি java.util.Date এমবেড, কিছু অভ্যন্তরীণ কাজকর্মের জন্য ব্যবহৃত (এই উত্তরে মন্তব্য দেখুন)। তবে এই অভ্যন্তরীণ সময় অঞ্চলটি সম্পত্তি হিসাবে প্রকাশিত হয়নি এবং সেট করা যায় না। এই অভ্যন্তরীণ সময় জোন না দ্বারা ব্যবহৃত এক toString
তারিখ-সময় মান একটি স্ট্রিং উপস্থাপনা উৎপাদিত পদ্ধতি; পরিবর্তে JVM- র বর্তমান ডিফল্ট সময় অঞ্চলটি অন-ফ্লাইতে প্রয়োগ করা হয়েছে। সুতরাং, শর্টহ্যান্ড হিসাবে, আমরা প্রায়শই বলে থাকি যে "জুলাইটির কোনও সময় অঞ্চল নেই"। বিভ্রান্তিকর? হ্যাঁ. এই ক্লান্ত পুরাতন ক্লাসগুলি এড়ানোর আরও একটি কারণ।