এখানে কিছু কোড সহ একটি জাভা 8 আপডেট রয়েছে, কারণ গ্রেগরিয়ানক্যালেন্ডার সম্ভবত ভবিষ্যতের জেডিকে সংস্করণগুলি থেকে অবচিত বা সরিয়ে দেওয়া হবে।
নতুন কোডটি WeekFields
ক্লাসে পরিচালনা করা হয় , এবং বিশেষত ফিল্ড অ্যাকসেসরের সাথে লোয়ার কেস y
/ আপার ক্ষেত্রে ।Y
weekBasedYear()
এই উইকফিল্ডসের উপর ভিত্তি করে এক সপ্তাহ ভিত্তিক-বর্ষের বছরে অ্যাক্সেসের জন্য একটি ক্ষেত্র ফেরত দেয়। এটি বছরের ধারণাটি উপস্থাপন করে যেখানে সপ্তাহগুলি নির্দিষ্ট সপ্তাহের সপ্তাহে শুরু হয়, যেমন সোমবার এবং প্রতিটি সপ্তাহ ঠিক এক বছরের অন্তর্গত। এই ক্ষেত্রটি সাধারণত ডেওঅফওইক () এবং সাপ্তাহিক অফ উইকেটবয়েসইয়ার () ব্যবহার করে।
এক সপ্তাহ (1) হল getFayDayOfWeek () থেকে শুরু হওয়া সপ্তাহ যেখানে বছরে কমপক্ষে getMinimalDaysInFirstWeek () দিন থাকে। সুতরাং, এক সপ্তাহ শুরু হওয়ার আগে বছর শুরু হতে পারে। যদি প্রথম সপ্তাহটি বছরের শুরু হওয়ার পরে শুরু হয় তবে পূর্ববর্তী সময়টি পূর্ববর্তী বছরের শেষ সপ্তাহে।
এই ক্ষেত্রটি যে কোনও ক্যালেন্ডার সিস্টেমের সাথে ব্যবহার করা যেতে পারে।
বিশ্লেষণের সমাধানের পর্যায়ে, সপ্তাহ-ভিত্তিক-বছর, সপ্তাহের-বছরের এবং সপ্তাহের-দিন থেকে একটি তারিখ তৈরি করা যায়।
কঠোর মোডে, তিনটি ক্ষেত্রই তাদের বৈধ মানগুলির পরিসীমাটির বিরুদ্ধে বৈধ হয়। সপ্তাহের বছরের ফিল্ডটি বৈধ করা হয় যে ফলাফলটি ভিত্তিক সপ্তাহ-ভিত্তিক অনুরোধ সাপ্তাহিক-ভিত্তিক বছর।
স্মার্ট মোডে, তিনটি ক্ষেত্রই তাদের বৈধ মানগুলির পরিসীমাটির বিপরীতে বৈধ হয়। সাপ্তাহের সপ্তাহভিত্তিক বছরের ক্ষেত্রটি 1 থেকে 53 পর্যন্ত যাচাই করা হয়, যার অর্থ ফলাফলের তারিখটি নিম্নলিখিত সপ্তাহের উপর ভিত্তি করে নির্দিষ্ট হতে পারে।
লেনিয়েন্ট মোডে, বছর এবং সপ্তাহের দিনটি বৈধ মানগুলির ব্যাপ্তির বিপরীতে বৈধ হয়। ফলাফলের তারিখটি নিম্নলিখিত তিনটি পর্যায়ের পদ্ধতির সমান গণনা করা হয়। প্রথমে অনুরোধ সপ্তাহ-ভিত্তিক-বছরে প্রথম সপ্তাহের প্রথম দিনে একটি তারিখ তৈরি করুন। তারপরে সপ্তাহের সাপ্তাহিক-ভিত্তিক-বর্ষটি নিন, একটিকে বিয়োগ করুন এবং সপ্তাহে পরিমাণটি তারিখে যুক্ত করুন। অবশেষে, স্থানীয়ীকৃত সপ্তাহের মধ্যে-সপ্তাহের সঠিক দিনের সাথে সামঞ্জস্য করুন।
এই WeekFields
উদাহরণটির সেটআপ লোকালের উপর নির্ভর করে এবং এর উপর নির্ভর করে বিভিন্ন সেটিংস থাকতে পারে, ফ্রান্সের মতো মার্কিন যুক্তরাষ্ট্র এবং ইউরোপীয় দেশগুলি সপ্তাহের শুরুতে আলাদা দিন থাকতে পারে।
DateFormatterBuilder
জাভা 8 এর উদাহরণস্বরূপ , লোকেলের সাহায্যে পার্সার ইনস্ট্যান্ট করুন এবং Y
প্রতীকটির জন্য এই লোকেলটি ব্যবহার করুন :
public final class DateTimeFormatterBuilder {
...
private void parsePattern(String pattern) {
...
} else if (cur == 'Y') {
appendInternal(new WeekBasedFieldPrinterParser(cur, count));
} else {
...
static final class WeekBasedFieldPrinterParser implements DateTimePrinterParser {
...
private DateTimePrinterParser printerParser(Locale locale) {
WeekFields weekDef = WeekFields.of(locale);
TemporalField field = null;
switch (chr) {
case 'Y':
field = weekDef.weekBasedYear();
if (count == 2) {
return new ReducedPrinterParser(field, 2, 2, 0, ReducedPrinterParser.BASE_DATE, 0);
} else {
return new NumberPrinterParser(field, count, 19,
(count < 4) ? SignStyle.NORMAL : SignStyle.EXCEEDS_PAD, -1);
}
case 'e':
case 'c':
field = weekDef.dayOfWeek();
break;
case 'w':
field = weekDef.weekOfWeekBasedYear();
break;
case 'W':
field = weekDef.weekOfMonth();
break;
default:
throw new IllegalStateException("unreachable");
}
return new NumberPrinterParser(field, (count == 2 ? 2 : 1), 2, SignStyle.NOT_NEGATIVE);
}
...
}
...
}
এখানে কিছু উদাহরণ
System.out.format("Conundrum : %s%n",
ZonedDateTime.of(2015, 12, 30, 0, 0, 0, 0, ZoneId.of("UTC"))
.format(DateTimeFormatter.ofPattern("YYYYMMdd'T'HHmms'S'")));
System.out.format("Solution : %s%n",
ZonedDateTime.of(2015, 12, 30, 0, 0, 0, 0, ZoneId.of("UTC"))
.format(DateTimeFormatter.ofPattern("yyyyMMdd'T'HHmms'S'")));
System.out.format("JVM Locale first day of week : %s%n",
WeekFields.of(Locale.getDefault()).getFirstDayOfWeek());
System.out.format("US first day of week : %s%n",
WeekFields.of(Locale.US).getFirstDayOfWeek());
System.out.format("France first day of week : %s%n",
WeekFields.of(Locale.FRANCE).getFirstDayOfWeek());
System.out.format("JVM Locale min days in 1st week : %s%n",
WeekFields.of(Locale.getDefault()).getMinimalDaysInFirstWeek());
System.out.format("US min days in 1st week : %s%n",
WeekFields.of(Locale.US).getMinimalDaysInFirstWeek());
System.out.format("JVM Locale min days in 1st week : %s%n",
WeekFields.of(Locale.FRANCE).getMinimalDaysInFirstWeek());
System.out.format("JVM Locale week based year (big Y): %s%n",
ZonedDateTime.of(2015, 12, 30, 0, 0, 0, 0, ZoneId.of("UTC")).get(WeekFields.of(Locale.FRANCE).weekBasedYear()));
System.out.format("France week based year (big Y) : %s%n",
ZonedDateTime.of(2015, 12, 30, 0, 0, 0, 0, ZoneId.of("UTC")).get(WeekFields.of(Locale.FRANCE).weekBasedYear()));
System.out.format("US week based year (big Y) : %s%n",
ZonedDateTime.of(2015, 12, 30, 0, 0, 0, 0, ZoneId.of("UTC")).get(WeekFields.of(Locale.US).weekBasedYear()));
আর লোকেল এবং উপরের মামলার ব্যাপারে Y
, হয় আপনি কমান্ড লাইন বিকল্প সঙ্গে খেলা করতে পারেন -Duser.language=
( fr
, en
, es
, ইত্যাদি), অথবা আবাহন সময়ে লোকেল ফোর্স:
System.out.format("English localized : %s%n",
ZonedDateTime.of(2015, 12, 30, 0, 0, 0, 0, ZoneId.of("UTC"))
.format(DateTimeFormatter.ofPattern("YYYYMMdd'T'HHmms'S'", Locale.ENGLISH)));
System.out.format("French localized : %s%n",
ZonedDateTime.of(2015, 12, 30, 0, 0, 0, 0, ZoneId.of("UTC"))
.format(DateTimeFormatter.ofPattern("YYYYMMdd'T'HHmms'S'", Locale.FRENCH)));