TL; ড
LocalDate // Represents an entire day, without time-of-day and without time zone.
.now( // Capture the current date.
ZoneId.of( "Asia/Tokyo" ) // Returns a `ZoneId` object.
) // Returns a `LocalDate` object.
.atStartOfDay( // Determines the first moment of the day as seen on that date in that time zone. Not all days start at 00:00!
ZoneId.of( "Asia/Tokyo" )
) // Returns a `ZonedDateTime` object.
দিনের শুরু
একটি সময় অঞ্চলে দেখা হিসাবে আজকের পূর্ণ দৈর্ঘ্য পান।
হাফ-ওপেন পদ্ধতির ব্যবহার, যেখানে শুরুটি একচেটিয়া থাকাকালীন অন্তর্ভুক্ত । এই পদ্ধতির মাধ্যমে আপনার কোডের ত্রুটিগুলি সমাধান করা হয় যা দিনের শেষ দ্বিতীয়টির জন্য অ্যাকাউন্টে ব্যর্থ হয়।
ZoneId zoneId = ZoneId.of( "Africa/Tunis" ) ;
LocalDate today = LocalDate.now( zoneId ) ;
ZonedDateTime zdtStart = today.atStartOfDay( zoneId ) ;
ZonedDateTime zdtStop = today.plusDays( 1 ).atStartOfDay( zoneId ) ;
zdtStart.toString () = 2020-01-30T00: 00 + 01: 00 [আফ্রিকা / টিউনিস]
zdtStop.toString () = 2020-01-31T00: 00 + 01: 00 [আফ্রিকা / টিউনিস]
ইউটিসিতে একই মুহুর্তগুলি দেখুন।
Instant start = zdtStart.toInstant() ;
Instant stop = zdtStop.toInstant() ;
start.toString () = 2020-01-29T23: 00: 00Z
স্টপ.টোস্ট্রিং () = 2020-01-30T23: 00: 00Z
আপনি যদি কোনও তারিখের পুরো দিনটি ইউটিসিতে টাইম জোনের পরিবর্তে দেখতে চান তবে ব্যবহার করুন OffsetDateTime
।
LocalDate today = LocalDate.now( ZoneOffset.UTC ) ;
OffsetDateTime odtStart = today.atTime( OffsetTime.MIN ) ;
OffsetDateTime odtStop = today.plusDays( 1 ).atTime( OffsetTime.MIN ) ;
odtStart.toString () = 2020-01-30T00: 00 + 18: 00
odtStop.toString () = 2020-01-31T00: 00 + 18: 00
এই OffsetDateTime
বস্তুগুলি ইতিমধ্যে ইউটিসিতে থাকবে, তবে আপনি toInstant
সংজ্ঞা অনুসারে সর্বদা ইউটিসিতে থাকা এমন বস্তুর প্রয়োজন হলে আপনি কল করতে পারেন can
Instant start = odtStart.toInstant() ;
Instant stop = odtStop.toInstant() ;
start.toString () = 2020-01-29T06: 00: 00Z
স্টপ টু স্ট্রিং () = 2020-01-30T06: 00: 00Z
টিপ: আপনি এই প্রকল্পের ক্লাসটি অবজেক্টের উপস্থাপনের জন্য ক্লাসটি ব্যবহার করতে আপনার প্রকল্পে থ্রিটেন-অতিরিক্ত লাইব্রেরি যুক্ত করতে আগ্রহী হতে পারেন । যেমন তুলনা জন্য এই শ্রেণীর অফার দরকারী পদ্ধতি , , , ড।Interval
Instant
abuts
overlaps
contains
Interval interval = Interval.of( start , stop ) ;
ইন্টারভাল.টোস্ট্রিং () = 2020-01-29T06: 00: 00Z / 2020-01-30T06: 00: 00Z
অর্ধেক খোলা
Mprivat দ্বারা উত্তর সঠিক। তার বক্তব্যটি কোনও দিনের শেষে পাওয়ার চেষ্টা না করে বরং "পরের দিন শুরুর আগে" তুলনা করা। তাঁর ধারণা "হাফ-খুলুন" পদ্ধতির সময় একটি স্প্যান টি যেখানে হিসাবে পরিচিত হয় শুরুতে যে সমেত যখন সমাপ্ত স্বতন্ত্র ।
- জাভার বর্তমান তারিখ-সময় অবকাঠামো (java.util.Date/Calendar এবং Joda-টাইম ) থেকে উভয় ব্যবহার মিলিসেকেন্ড যুগান্তকারী । তবে জাভা 8-এ, নতুন জেএসআর 310 জাভা.টাইম। * ক্লাসগুলি ন্যানোসেকেন্ড রেজোলিউশন ব্যবহার করে। দিনের শেষ মুহুর্তের মিলিসেকেন্ড গণনা জোর করে আপনি যে কোড লিখেছেন তা নতুন ক্লাসে স্যুইচ করা থাকলে ভুল হবে incor
- অন্যান্য উত্স থেকে ডেটা তুলনা ত্রুটিযুক্ত হয়ে ওঠে যদি তারা অন্যান্য রেজোলিউশন ব্যবহার করে। উদাহরণস্বরূপ, ইউনিক্স গ্রন্থাগারগুলি সাধারণত পুরো সেকেন্ডে নিয়োগ করে এবং পোস্টগ্রিসের মতো ডেটাবেসগুলি মাইক্রোসেকেন্ডগুলিতে তারিখ-সময়কে সমাধান করে।
- মধ্যরাতের উপর দিবালোক সংরক্ষণের কিছু পরিবর্তন ঘটে যা জিনিসগুলিকে আরও বিভ্রান্ত করতে পারে।
Joda-টাইম এই খুব উদ্দেশ্যে 2.3 অফার একটি পদ্ধতি, দিনের প্রথম মুহূর্ত প্রাপ্ত: withTimeAtStartOfDay()
। একইভাবে জাভা.টাইমে LocalDate::atStartOfDay
,।
আরও আলোচনার এবং উদাহরণগুলি দেখতে "জোদা অর্ধ-খোলা" এর জন্য স্ট্যাকওভারফ্লো অনুসন্ধান করুন ।
এই পোস্টটি দেখুন, সময়ের ব্যবধান এবং অন্যান্য ব্যাপ্তিগুলি বিল স্নাইডারের দ্বারা অর্ধ-খোলা হওয়া উচিত ।
উত্তরাধিকারের তারিখ-সময় ক্লাসগুলি এড়িয়ে চলুন
Java.util. তারিখ এবং .ক্যালেন্ডার ক্লাসগুলি কুখ্যাত সমস্যাযুক্ত। এগুলি এড়িয়ে চলুন।
জাভা.টাইম ক্লাস ব্যবহার করুন । Java.time ফ্রেমওয়ার্ক অত্যন্ত সফল অফিসিয়াল উত্তরাধিকারী Joda-টাইম গ্রন্থাগার।
java.time
জাভা.টাইম ফ্রেমওয়ার্কটি জাভা 8 এবং তার পরে তৈরি করা হয়েছে। থ্রিটেন-ব্যাকপোর্ট প্রকল্পে জাভা 6 এবং 7 এ ব্যাক-পোর্টড , আরও থ্রিডেএনএবিপি প্রকল্পে অ্যান্ড্রয়েডের সাথে অভিযোজিত ।
একটি Instant
মধ্যে টাইমলাইনে একটি মুহূর্ত ইউটিসি একটি রেজোলিউশনে ন্যানোসেকেন্ড ।
Instant instant = Instant.now();
কিছু লোকালের জন্য প্রাচীর-ঘড়ির সময় পেতে একটি সময় অঞ্চল প্রয়োগ করুন ।
ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );
দিনের প্রথম মুহূর্তটি পেতে LocalDate
ক্লাস এবং তার atStartOfDay
পদ্ধতির মধ্য দিয়ে যান ।
ZonedDateTime zdtStart = zdt.toLocalDate().atStartOfDay( zoneId );
হাফ-ওপেন পদ্ধতির ব্যবহার করে, নিম্নলিখিত দিনের প্রথম মুহূর্তটি পান।
ZonedDateTime zdtTomorrowStart = zdtStart.plusDays( 1 );
বর্তমানে জাভা.টাইম ফ্রেমওয়ার্কে Interval
জোদা-টাইমের জন্য নীচে বর্ণিত শ্রেণীর অভাব রয়েছে । তবে থ্রিটেন-এক্সট্রা প্রকল্পটি অতিরিক্ত ক্লাসের সাথে জাভা.টাইম প্রসারিত করে। এই প্রকল্পটি জাভা.টাইমে সম্ভাব্য ভবিষ্যতের সংযোজনগুলির প্রমাণকারী ক্ষেত্র। এর ক্লাসগুলির মধ্যে রয়েছে Interval
। একটি আঁকো Interval
একজোড়া ক্ষণস্থায়ী দ্বারা Instant
বস্তু। আমরা Instant
আমাদের ZonedDateTime
বস্তু থেকে একটি নিষ্কাশন করতে পারেন ।
Interval today = Interval.of( zdtStart.toInstant() , zdtTomorrowStart.toInstant() );
জাভা.টাইম সম্পর্কে
Java.time ফ্রেমওয়ার্ক জাভা 8 এবং পরে পাতাটা করা হয়। এই ক্লাসগুলি , & , এর মতো সমস্যাযুক্ত পুরানো উত্তরাধিকারের তারিখ-সময়ের ক্লাসগুলিকে সহায়তা করে ।java.util.Date
Calendar
SimpleDateFormat
আরও জানতে, ওরাকল টিউটোরিয়ালটি দেখুন । এবং অনেকগুলি উদাহরণ এবং ব্যাখ্যার জন্য স্ট্যাক ওভারফ্লো অনুসন্ধান করুন। স্পেসিফিকেশনটি জেএসআর 310 ।
Joda-টাইম প্রকল্প, এখন রক্ষণাবেক্ষণ মোড , মাইগ্রেশনে উপদেশ java.time ক্লাস।
আপনি আপনার ডাটাবেসের সাথে জাভা.টাইম অবজেক্টগুলি সরাসরি বিনিময় করতে পারেন । জেডিবিসি ৪.২ বা তারপরের সাথে অনুগত একটি জেডিবিসি ড্রাইভার ব্যবহার করুন । স্ট্রিংগুলির দরকার নেই, ক্লাসের প্রয়োজন নেই । হাইবারনেট 5 এবং জেপিএ 2.2 সমর্থন জাভা.টাইম ।java.sql.*
জাভা.টাইম ক্লাস কোথায় পাবেন?
Joda-টাইম
আপডেট: জোদা-টাইম প্রকল্পটি এখন রক্ষণাবেক্ষণ-মোডে রয়েছে এবং জাভা.টাইম ক্লাসগুলিতে স্থানান্তরের পরামর্শ দেয় । আমি এই বিভাগটি ইতিহাসের জন্য অক্ষত রেখে দিচ্ছি।
Joda-টাইম তিনটি শ্রেণীতে নানাভাবে সময় একটি স্প্যান প্রতিনিধিত্ব করতে আছে: Interval
, Period
, এবং Duration
। একটি Interval
মহাবিশ্বের টাইমলাইনে একটি নির্দিষ্ট সূচনা এবং শেষ আছে। এটি "একটি দিন" উপস্থাপন করার জন্য আমাদের প্রয়োজনীয়তার সাথে খাপ খায়।
withTimeAtStartOfDay
শূন্যে দিনের সময় নির্ধারণের পরিবর্তে আমরা পদ্ধতিটিকে কল করি । দিবালোক সংরক্ষণের সময় এবং অন্যান্য অসঙ্গতিগুলির কারণে দিনের প্রথম মুহূর্তটি নাও হতে পারে 00:00:00
।
জোদা-সময় ২.৩ ব্যবহার করে কোডের উদাহরণ।
DateTimeZone timeZone = DateTimeZone.forID( "America/Montreal" );
DateTime now = DateTime.now( timeZone );
DateTime todayStart = now.withTimeAtStartOfDay();
DateTime tomorrowStart = now.plusDays( 1 ).withTimeAtStartOfDay();
Interval today = new Interval( todayStart, tomorrowStart );
যদি আপনার অবশ্যই হয় তবে আপনি java.util.Date এ রূপান্তর করতে পারেন।
java.util.Date date = todayStart.toDate();