यहाँ कुछ कोड के साथ जावा 8 अपडेट है, क्योंकि ग्रेगोरियन कैलेन्डर को संभवतः भविष्य के JDK संस्करणों से हटा दिया जाएगा या हटा दिया जाएगा।
नया कोड WeekFields
कक्षा में संभाला जाता है , और विशेष रूप से निचले मामले y
/ ऊपरी मामले Y
के लिए weekBasedYear()
फ़ील्ड एक्सेसर के साथ।
इस वीकफ़िल्ड्स के आधार पर सप्ताह-आधारित-वर्ष के वर्ष तक पहुंचने के लिए एक फ़ील्ड देता है। यह उस वर्ष की अवधारणा का प्रतिनिधित्व करता है जहां सप्ताह एक निश्चित दिन के सप्ताह से शुरू होता है, जैसे कि सोमवार और प्रत्येक सप्ताह ठीक एक वर्ष से संबंधित है। यह फ़ील्ड आमतौर पर dayOfWeek () और weekOfWeekBasedYear () के साथ उपयोग की जाती है।
सप्ताह एक (1) सप्ताह है, जो GetFirstDayOfWeek () पर शुरू हो रहा है, जहाँ वर्ष में कम से कम 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)));