অন্যান্য উত্তরগুলি সঠিক, বিশেষত জাভা.টাইম উত্তর আরগানহেং দ্বারা । কিছু উল্লিখিত হিসাবে, আপনি পুরানো java.util. তারিখ /.ক্যালেন্ডার ক্লাসগুলি খারাপভাবে নকশাকৃত, বিভ্রান্তিকর এবং ঝামেলাযুক্ত হিসাবে এড়ানো উচিত। সেগুলি জাভা.টাইম ক্লাস দ্বারা সংক্রামিত করা হয়েছে।
মধ্যরাত্রি এবং সময়ের বেশ কয়েকটি সময় পরিচালনা করার বিষয়ে কৌশল সম্পর্কে নোটগুলি যোগ করতে দিন ।
অর্ধেক খোলা
তারিখের সময়কালে কাজের সময়গুলিতে প্রায়শই "অর্ধ-ওপেন" পদ্ধতির সাহায্যে সংজ্ঞা দেওয়া হয়। এই পদ্ধতির শুরুতে অন্তর্ভুক্ত রয়েছে যখন শেষটি একচেটিয়া । এটি সমস্যার সমাধান করে এবং যদি ধারাবাহিকভাবে ব্যবহার করা হয় তবে আপনার তারিখ-সময় পরিচালনার বিষয়ে যুক্তিটি আরও সহজ করে তোলে।
একটি সমস্যার সমাধান হল দিনের শেষ সংজ্ঞা দেওয়া def দিনের শেষ মুহূর্তটি কি 23:59:59.999( মিলিসেকেন্ড )? সম্ভবত, java.util.Date ক্লাসে (প্রথম দিকের জাভা থেকে; ঝামেলা - এই শ্রেণিটি এড়ান !) এবং অত্যন্ত সফল জোদা-টাইম লাইব্রেরিতে। তবে অন্যান্য সফ্টওয়্যারগুলিতে যেমন পোস্টগ্রিসের মতো ডেটাবেস, শেষ মুহুর্তটি হবে 23:59:59.999999( মাইক্রোসেকেন্ডস )। তবে অন্যান্য সফ্টওয়্যারগুলিতে যেমন জাভা.টাইম ফ্রেমওয়ার্ক (জাভা ৮ এবং তার পরে, জোদা-টাইমের উত্তরসূরি) এবং কোনও কোনও ডাটাবেসে যেমন এইচ 2 ডেটাবেস , শেষ মুহুর্তটি হতে পারে 23:59.59.999999999( ন্যানোসেকেন্ডস )। চুল বিভক্ত করার পরিবর্তে, কেবল প্রথম মুহুর্তের হিসাবে বিবেচনা করুন, শেষ মুহুর্ত নয়।
হাফ-ওপেনে, একদিনের প্রথম মুহুর্ত থেকে একটি দিন চলে এবং উপরে যায় তবে পরের দিনের প্রথম মুহূর্তটি অন্তর্ভুক্ত হয় না। বরং এটির মতো চিন্তা করার চেয়ে:
… আজ থেকে সকাল 00:00 টা (এই ভোরে মধ্যরাত) থেকে রাত 12: 00 (আজ রাত্রে)
… এভাবে ভাবুন…
আজকের প্রথম মুহুর্ত থেকে চলার তবে আগামীর প্রথম মুহুর্তটি অন্তর্ভুক্ত নয়:
(> = 00:00:00.0আজ এবং < 00:00:00.0কাল)
ডাটাবেসের কাজে, এই পদ্ধতির অর্থ অপারেটরটি ব্যবহার না করাBETWEEN এসকিউএল-তে ।
দিনের শুরু
উপরন্তু, দিনের প্রথম মুহূর্ত না সবসময় সময় অফ দিন 00:00:00.0। দিবালোক সংরক্ষণের সময় (ডিএসটি)কিছু সময় অঞ্চলে এবং সম্ভবত অন্যান্য অসঙ্গতিগুলির অর্থ দিনের শুরু হওয়া আলাদা সময় হতে পারে।
সুতরাং জাভা.টাইম ক্লাসগুলিকে একটি কল দিয়ে কোনও দিনের শুরু নির্ধারণের কাজটি করতে দিন LocalDate::atStartOfDay( ZoneId )। সুতরাং আমরা এই উদাহরণস্বরূপ কোডটিতে দেখতে পেলাম LocalDateএবং তার পিছনে পিছনে যেতে হবে ZonedDateTime।
ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime now = ZonedDateTime.now( zoneId );
ZonedDateTime todayStart = now.toLocalDate().atStartOfDay( zoneId );
ZonedDateTime tomorrowStart = todayStart.plusDays( 1 );
Alচ্ছিক পাস করার বিষয়টি নোট করুন ZoneId। বাদ দেওয়া হলে আপনার জেভিএমের বর্তমান ডিফল্ট সময় অঞ্চলটি সুস্পষ্টভাবে প্রয়োগ করা হয়েছে। স্পষ্ট করে বলা ভাল।
তারিখ-সময় কাজের জন্য সময় অঞ্চলটি গুরুত্বপূর্ণ। প্রশ্ন এবং অন্যান্য কিছু উত্তর সম্ভাব্য ত্রুটিযুক্ত কারণ সচেতনভাবে সময় অঞ্চলটি পরিচালনা করে না।
রূপান্তর
আপনার যদি অবশ্যই java.util.Date অথবা .Clavender ব্যবহার করেন তবে সেই পুরানো শ্রেণিতে যুক্ত হওয়া নতুন রূপান্তর পদ্ধতির সন্ধান করুন।
java.util.Date utilDate = java.util.Date.from( todayStart.toInstant() );
java.util.GregorianCalendar gregCal = java.util.GregorianCalendar.from( todayStart );
সময় বিঘত
যাইহোক, আপনি যদি সময়ের সাথে অনেক কাজ করে থাকেন তবে একবার দেখুন:
Duration
Period
Interval
Intervalশ্রেণী পাওয়া যায় ThreeTen-এক্সট্রা , প্রকল্প java.time ফ্রেমওয়ার্ক একটি এক্সটেনশান। এই প্রকল্পটি জাভা.টাইমে সম্ভাব্য ভবিষ্যতের সংযোজনগুলির প্রমাণকারী ক্ষেত্র।
Interval todayMontreal = Interval.of( todayStart.toInstant() , tomorrowStart.toInstant() );
সম্পর্কিত জাভা.টাইম
Java.time ফ্রেমওয়ার্ক জাভা 8 এবং পরে পাতাটা করা হয়। এই শ্রেণীর বিরক্তিজনক পুরাতন স্থানচ্যুত উত্তরাধিকার যেমন তারিখ-সময় শ্রেণীর java.util.Date, Calendar, &SimpleDateFormat ।
Joda-টাইম প্রকল্প, এখন রক্ষণাবেক্ষণ মোড , এর মাইগ্রেশন উপদেশ java.time ক্লাস।
আরও জানতে, ওরাকল টিউটোরিয়ালটি দেখুন । এবং অনেক উদাহরণ এবং ব্যাখ্যার জন্য স্ট্যাক ওভারফ্লো অনুসন্ধান করুন। স্পেসিফিকেশনটি জেএসআর 310 ।
আপনি আপনার ডাটাবেসের সাথে জাভা.টাইম অবজেক্টগুলি সরাসরি বিনিময় করতে পারেন । জেডিবিসি ৪.২ বা তারপরের সাথে অনুগত একটি জেডিবিসি ড্রাইভার ব্যবহার করুন । স্ট্রিংগুলির দরকার নেই, ক্লাসের প্রয়োজন নেই ।java.sql.*
জাভা.টাইম ক্লাস কোথায় পাবেন?
ThreeTen-অতিরিক্ত প্রকল্প অতিরিক্ত শ্রেণীর সাথে java.time প্রসারিত করে। এই প্রকল্পটি জাভা.টাইমে সম্ভাব্য ভবিষ্যতের সংযোজনগুলির একটি প্রমাণযোগ্য ক্ষেত্র। আপনি এখানে কিছু দরকারী শ্রেণীর যেমন খুঁজে পেতে পারেন Interval, YearWeek, YearQuarter, এবং আরো ।