java - स्थानीयडीट ऑब्जेक्ट को MM/dd/yyyy को प्रारूपित करने के लिए कैसे और फ़ॉर्मेट जारी रहें




parsing formatting (3)

बस उस तारीख को प्रारूपित करें, जब इसे छापें:

public static void main(String[] args) {
    LocalDate date = LocalDate.now();
    DateTimeFormatter formatters = DateTimeFormatter.ofPattern("d/MM/uuuu");
    String text = date.format(formatters);
    LocalDate parsedDate = LocalDate.parse(text, formatters);

    System.out.println("date: " + date);
    System.out.println("Text format " + text);
    System.out.println("parsedDate: " + parsedDate.format(formatters));
}

मैं पाठ पढ़ रहा हूं और तिथियों को स्थानीय डेट वैरिएबल के रूप में संग्रहित कर रहा हूं।

क्या मुझे डेटटाइमफ़ॉर्मर से फ़ॉर्मेटिंग को संरक्षित करने के लिए कोई रास्ता है ताकि जब मैं लोकलडेट वैरिएबल पर कॉल करता हूं तो यह अभी भी इस प्रारूप में होगा।

संपादित करें: मैं एक स्ट्रिंग के रूप में मुद्रण के बजाय 25/09/2016 को सही प्रारूप में संग्रहीत करने के लिए पार्सेड डेट चाहता हूं

मेरा कोड:

public static void main(String[] args) 
{
    LocalDate date = LocalDate.now();
    DateTimeFormatter formatters = DateTimeFormatter.ofPattern("d/MM/uuuu");
    String text = date.format(formatters);
    LocalDate parsedDate = LocalDate.parse(text, formatters);

    System.out.println("date: " + date); // date: 2016-09-25
    System.out.println("Text format " + text); // Text format 25/09/2016
    System.out.println("parsedDate: " + parsedDate); // parsedDate: 2016-09-25

    // I want the LocalDate parsedDate to be stored as 25/09/2016
}

संक्षिप्त जवाब: नहीं।

लंबे उत्तर: एक LocalDate एक वर्ष, महीने और दिन का प्रतिनिधित्व करने वाला एक ऑब्जेक्ट होता है, और ये उन तीन क्षेत्रों में शामिल होंगे जो इसमें शामिल होंगे। इसमें कोई प्रारूप नहीं है, क्योंकि अलग-अलग स्थानों पर अलग-अलग स्वरूप होते हैं, और यह उन कार्रवाइयों को पूरा करना कठिन होता है जो एक LocalDate पर प्रदर्शन करना चाहते हैं (जैसे दिन को जोड़ना या घटाना या समय जोड़ना)।

स्ट्रींग प्रतिनिधित्व ( toString() द्वारा उत्पादित toString() दिनांक मुद्रित करने के लिए अंतर्राष्ट्रीय मानक है। यदि आप एक अलग प्रारूप चाहते हैं, तो आपको अपनी पसंद का DateTimeFormatter फ़ॉर्मेट का उपयोग करना चाहिए।


यह संभव हो सकता है कि आप स्थानीय डेट का विस्तार कर सकते हैं और स्ट्रिंग toString() विधि को ओवरराइड कर सकते हैं, लेकिन स्थानीयडीट वर्ग अपरिवर्तनीय है और इसलिए (सुरक्षित ओओपी) अंतिम इसका मतलब यह है कि यदि आप इस वर्ग का उपयोग केवल toString() पद्धति का उपयोग करना चाहते हैं तो आप उपर्युक्त (स्थानीय डेटा स्रोतों से प्रतिलिपि) उपयोग कर सकेंगे:

@Override
public String toString() {
    int yearValue = year;
    int monthValue = month;
    int dayValue = day;
    int absYear = Math.abs(yearValue);
    StringBuilder buf = new StringBuilder(10);
    if (absYear < 1000) {
        if (yearValue < 0) {
            buf.append(yearValue - 10000).deleteCharAt(1);
        } else {
            buf.append(yearValue + 10000).deleteCharAt(0);
        }
    } else {
        if (yearValue > 9999) {
            buf.append('+');
        }
        buf.append(yearValue);
    }
    return buf.append(monthValue < 10 ? "-0" : "-")
        .append(monthValue)
        .append(dayValue < 10 ? "-0" : "-")
        .append(dayValue)
        .toString();
}

यदि आप इस व्यवहार को ओवरराइड करना चाहते हैं, तो आप LocalDate को बॉक्स कर सकते हैं और अपनी कस्टम स्ट्रिंग विधि का उपयोग कर सकते हैं, लेकिन इससे अधिक समस्याएं हल हो सकती हैं!





localdate