java - जापानी दिनांक सत्यापन-तुलना




date calendar locale (2)

सबसे पहले: the

now.getDisplayNames(Calendar.ERA, Calendar.LONG, locale)

दी गई लोकेल में डिस्प्ले नाम लौटाता है, जो आपके मामले में जापानी है। तो ?? जो अंक आप प्राप्त कर रहे हैं वह युग के मान्य जापानी नाम हैं, यह सिर्फ इतना है कि आपका कंसोल उन्हें प्रिंट नहीं कर सकता। में बदलो

now.getDisplayNames(Calendar.ERA, Calendar.LONG, new Locale("en"))

और आपको एक अच्छा मिलेगा

{Heisei=4, Taisho=2, Meiji=1, Showa=3}

जावा Calendar मान्य नहीं है यदि आप युग के साथ "यथोचित" खेतों की स्थापना कर रहे हैं, लेकिन आप Calendar#getActualMaximum(YEAR) अनुरोध कर सकते हैं कि एक अधिकतम युग में एक कैलेंडर के उदाहरण को अधिकतम उचित वर्ष प्राप्त करने के लिए। उसके बाद, आप उस माह में अधिकतम उचित माह को खोजने के लिए स्विच कर सकते हैं और अधिकतम उचित दिन खोजने के लिए दोहरा सकते हैं।

यहाँ एक छोटे से शोकेस है:

public static void main(String[] args) {
    Locale locale = new Locale("ja", "JP", "JP");
    Calendar now = Calendar.getInstance(locale);
    Map<String, Integer> ears = now.getDisplayNames(Calendar.ERA, Calendar.LONG, new Locale("en"));
    for (Map.Entry<String, Integer> era : ears.entrySet()) {
        Integer eraIndex = era.getValue();
        String eraName = era.getKey();
        System.out.printf("Era #%d [%s]%n", eraIndex, eraName);
        now.set(Calendar.ERA, eraIndex);
        now.set(Calendar.YEAR, 1);
        now.set(Calendar.DAY_OF_YEAR, 1);
        System.out.printf("Actual max year in era is %d%n", now.getActualMaximum(Calendar.YEAR));
    }
}

प्रिंट

Era #4 [Heisei]
Actual max year in era is 292277005 // current era
Era #2 [Taisho]
Actual max year in era is 15
Era #1 [Meiji]
Actual max year in era is 44
Era #3 [Showa]
Actual max year in era is 63

मुझे उपयोगकर्ता द्वारा दर्ज की जाने वाली जापानी तारीख को मान्य करना होगा।

मान लें कि उपयोगकर्ता युवराज का चयन करता है -> YY - MM - dd प्रारूप के रूप में दर्ज करें।

सर्वर साइड में, मैं उपयोगकर्ता द्वारा चयनित input date और ERA प्राप्त करता है।

अब मुझे चयनित युग के साथ दर्ज की गई तारीख को मान्य करना होगा, यदि तारीख विशेष युग की अवधि में होती है या नहीं।

मुझे पता है कि इसके लिए जावा कैलेंडर एपीआई में समर्थन है, इसके अलावा वहाँ भी JapaneseImperialCalendar इम्पीरियल कैलेंडर है, लेकिन मुझे इसका उपयोग करने के लिए कोई सुराग नहीं मिल सकता है, हालांकि यह आंतरिक रूप से इसका उपयोग करता है

यह अब तक मैंने किया है।

public static void main(String[] args) {
        Locale locale = new Locale("ja", "JP", "JP");
        Calendar now = Calendar.getInstance(locale);
        System.out.println(now.get(Calendar.ERA));
        Map<String, Integer> names = now.getDisplayNames(Calendar.ERA, Calendar.LONG, locale);
        System.out.println(names);
        System.out.printf("It is year %tY of the current era%n", now);
        System.out.printf("The calendar class is: %s%n", now.getClass().getName());
    }

उत्पादन

4
{??=3, ??=4, ??=2, ??=1, ??=0}
It is year 0026 of the current era
The calendar class is: java.util.JapaneseImperialCalendar

मान लें कि उपयोगकर्ता प्रवेश करता है, चयनित युग SHOWA , अपेक्षित अवधि 1926–1989

YY   MM    DD
34   05    28  // which is valid date

फिर

YY   MM    DD
62   12    28  // which should be invalid date

इसलिए यूआरए के साथ उपयोगकर्ता इनपुट तिथि को मान्य करने के लिए कुछ तर्क बनाने की जरूरत है


जब -F का उपयोग किया जाता है, तो jvm को फ्रीज किया जाएगा।

यदि आप file: /tmp/hsperfdata_$USER/$PID पा सकते हैं file: /tmp/hsperfdata_$USER/$PID । बस $USER पर स्विच करने का प्रयास करें, और फिर exec jstack । आप " रूट " के साथ चल रहे हैं, लेकिन यह प्रक्रिया रूट से संबंधित नहीं हो सकती है।

अगर $USER पास लॉगिन शेल (यानी डेमॉन उपयोगकर्ता) नहीं है, और इस प्रकार वह उपयोगकर्ता पर स्विच नहीं कर सकता है, तो आप sudo -u $USER jstack $PID का उपयोग करके इसके आसपास काम कर सकते हैं





java date calendar locale