1. ZonedDateTimeক্লাস

ডেট টাইম এপিআইতে আরেকটি খুব আকর্ষণীয় ক্লাস রয়েছে: ক্লাস ZonedDateTime। এর মূল উদ্দেশ্য হল বিভিন্ন সময় অঞ্চলে তারিখের সাথে কাজ করা সুবিধাজনক করা।

LocalDateতারিখ প্রতিনিধিত্ব জন্য মহান. উদাহরণস্বরূপ, জন্মদিন। আমি যেখানেই থাকি না কেন আমার জন্মদিন 15ই মার্চ। এটি একটি তারিখের উদাহরণ।

LocalTimeসময় বর্ণনা করা খুব ভালো, যেমন একটি অ্যালার্ম ঘড়িতে সেট করা সময়: আমি সকাল 5:00 এর জন্য অ্যালার্ম সেট করেছি এবং আমি কোথায় আছি তাতে কিছু যায় আসে না। 5:00 am হল 5:00 am. এটি সময়ের সাথে কাজ করার একটি উদাহরণ।

এখন বলা যাক যে আমরা একটি অ্যাপ্লিকেশন লিখছি যা ফ্লাইট বুক করে। স্থানীয় সময় অনুযায়ী প্লেন টেক অফ করে এবং পৌঁছায়। বিমানটি একটি নির্দিষ্ট সময়ের জন্য বাতাসে থাকে, তবে সময় অঞ্চল পরিবর্তন হতে পারে।

সময় অঞ্চল

যাইহোক, সময় অঞ্চল একটি বাস্তব জগাখিচুড়ি. এবং আপনি যদি মনে করেন যে 24টি সময় অঞ্চল আছে, আপনি ব্যাপকভাবে ভুল করছেন।

উদাহরণ স্বরূপ, ভারতের সময় গ্রিনিচ গড় সময়ের থেকে সাড়ে পাঁচ ঘণ্টার পার্থক্য: GMT+5:30. কিছু দেশ ডেলাইট সেভিং টাইমে স্যুইচ করে, অন্যরা করে না। আরও কি, বিভিন্ন দেশ বছরের বিভিন্ন সময়ে গ্রীষ্মের সময় পরিবর্তন করে।

এবং কিছু দেশ এমন আইন পাস করে যা ডেলাইট সেভিং টাইম বাতিল করে, বা এটিকে পুনরায় চালু করে, বা আবার বাতিল করে।

যে কোনো ঘটনাতে, বিশ্বের সময় অঞ্চল আছে, এবং প্রতিটি সময় অঞ্চলের মধ্যে একটি সময় আছে। বিভিন্ন অঞ্চলের সময় বছরের নির্দিষ্ট সময়ের মধ্যে মিলিত হতে পারে, এবং তারপরে অন্যান্য সময়কালে ভিন্ন হতে পারে। টাইম জোনগুলি সাধারণত তাদের মধ্যে অবস্থিত প্রধান শহরগুলির নামানুসারে নামকরণ করা হয়: Europe/Monaco, Asia/Singapore, তবে ব্যতিক্রমও রয়েছে — US/Pacific.

আনুষ্ঠানিকভাবে, এই মুহূর্তে 599টি সময় অঞ্চল রয়েছে। এটি সম্পর্কে চিন্তা করুন: 599. এটি 24 থেকে অনেক দূরে। বিশ্ব বিশ্বে স্বাগতম।

ZoneIdপ্যাকেজের ক্লাসটি জাভাতে java.timeএকটি সময় অঞ্চল সংরক্ষণ করতে ব্যবহৃত হয়।

যাইহোক, এটির একটি স্ট্যাটিক getAvailableZoneIds()পদ্ধতি রয়েছে, যা বর্তমানে পরিচিত সমস্ত সময় অঞ্চলের সেট প্রদান করে। সমস্ত অঞ্চলের একটি তালিকা পেতে, আপনাকে নিম্নলিখিত কোডটি লিখতে হবে:

কোড কনসোল আউটপুট (আংশিক)
for (String s: ZoneId.getAvailableZoneIds())
   System.out.println(s);
Asia/Aden
America/Cuiaba
Etc/GMT+9
Etc/GMT+8

ZoneIdএকটি বস্তুর নামের দ্বারা পেতে , আপনি স্ট্যাটিক of()পদ্ধতি ব্যবহার করতে হবে;

কোড বিঃদ্রঃ
ZoneId zone = ZoneId.of("Africa/Cairo");
Cairo


2. একটি ZonedDateTimeবস্তু তৈরি করা

একটি অবজেক্ট তৈরি করার সময় ZonedDateTime, আপনাকে ক্লাসের স্ট্যাটিক now()পদ্ধতিতে কল করতে হবে এবং ZoneIdএটিতে একটি অবজেক্ট পাস করতে হবে।

কোড কনসোল আউটপুট
ZoneId zone = ZoneId.of("Africa/Cairo");
ZonedDateTime time = ZonedDateTime.now(zone);
System.out.println(time);


2019-02-22T11:37:58.074816+02:00[Africa/Cairo]

ZoneIdআপনি যদি পদ্ধতিতে একটি বস্তু পাস না করেন now()(এবং এটি অনুমোদিত), তাহলে প্রোগ্রামটি চালানো কম্পিউটারের সেটিংসের উপর ভিত্তি করে টাইম জোন স্বয়ংক্রিয়ভাবে নির্ধারিত হয়।

উদাহরণ:

কোড কনসোল আউটপুট
ZonedDateTime time = ZonedDateTime.now();
System.out.println(time);

2019-02-22T13:39:05.70842+02:00[Europe/Helsinki]

একটি বিশ্বব্যাপী তারিখকে স্থানীয় তারিখে রূপান্তর করা হচ্ছে

এর আকর্ষণীয় বৈশিষ্ট্যগুলির মধ্যে একটি ZonedDateTimeহল স্থানীয় তারিখ এবং সময়ে রূপান্তর করার ক্ষমতা। উদাহরণ:

ZoneId zone = ZoneId.of("Africa/Cairo");
ZonedDateTime cairoTime = ZonedDateTime.now(zone);

LocalDate localDate = cairoTime.toLocalDate();
LocalTime localTime = cairoTime.toLocalTime();
LocalDateTime localDateTime = cairoTime.toLocalDateTime();

3. সময়ের সাথে কাজ করা

ক্লাসের মতো LocalDateTime, ZonedDateTimeক্লাসে একটি তারিখ এবং সময়ের পৃথক উপাদানগুলি পেতে প্রচুর উপায় রয়েছে। এখানে এই পদ্ধতিগুলির একটি তালিকা রয়েছে:

int getYear()
একটি নির্দিষ্ট তারিখের বছর প্রদান করে
Month getMonth()
তারিখের মাস দেখায়: বেশ কয়েকটি ধ্রুবকের মধ্যে একটি —JANUARY, FEBRUARY, ...;
int getMonthValue()
তারিখের মাসের সূচী প্রদান করে। জানুয়ারি == ১
int getDayOfMonth()
মাসের দিনের সূচী প্রদান করে
DayOfWeek getDayOfWeek()
সপ্তাহের দিন ফেরত দেয়: বেশ কয়েকটি ধ্রুবকের মধ্যে একটি —MONDAY, TUESDAY, ...;
int getDayOfYear()
বছরের দিনের সূচী প্রদান করে
int getHour()
ঘন্টা ফেরত দেয়
int getMinute()
মিনিট রিটার্ন করে
int getSecond()
সেকেন্ড ফেরত দেয়
int getNano()
ন্যানোসেকেন্ড ফেরত দেয়

সমস্ত পদ্ধতি ক্লাসের পদ্ধতির সাথে পুরোপুরি সাদৃশ্যপূর্ণ LocalDateTime। এবং, অবশ্যই, ZonedDateTimeক্লাসে এমন পদ্ধতি রয়েছে যা আপনাকে তারিখ এবং সময়ের সাথে কাজ করতে দেয়। এটি বলেছিল, যে বস্তুটির উপর পদ্ধতিগুলি বলা হয় তা পরিবর্তন হয় না। পরিবর্তে, তারা একটি নতুন ZonedDateTimeবস্তু ফেরত দেয়:

পদ্ধতি বর্ণনা
plusYears(int)
তারিখে বছর যোগ করে
plusMonths(int)
তারিখে মাস যোগ করে
plusDays(int)
তারিখে দিন যোগ করে
plusHours(int)
ঘন্টা যোগ করে
plusMinutes(int)
মিনিট যোগ করে
plusSeconds(int)
সেকেন্ড যোগ করে
plusNanos(int)
ন্যানোসেকেন্ড যোগ করে
minusYears(int)
তারিখ থেকে বছর বিয়োগ করে
minusMonths(int)
তারিখ থেকে মাস বিয়োগ করে
minusDays(int)
তারিখ থেকে দিন বিয়োগ করে
minusHours(int)
ঘন্টা বিয়োগ করে
minusMinutes(int)
মিনিট বিয়োগ করে
minusSeconds(int)
সেকেন্ড বিয়োগ করে
minusNanos(int)
ন্যানোসেকেন্ড বিয়োগ করে

আমরা কোন উদাহরণ প্রদান করব না, যেহেতু আমরা মনে করি যে ক্লাসগুলি আমরা এইমাত্র বিবেচনা করেছি তার সাথে সাদৃশ্য দ্বারা এখানে সবকিছু পরিষ্কার।