"EEE MMM dd HH: mm: ss ZZZ yyyy" तिथि प्रारूप को java.sllate पर जाएं



mysql sql (1)

मैं EEE MMM dd HH:mm:ss ZZZ yyyy को YYYY-MM-DD प्रारूप में बदलने का प्रयास कर रहा हूं, इसलिए मैं इसे MySQL डेटाबेस में सम्मिलित कर सकता हूं। मुझे कोई त्रुटि नहीं है, लेकिन मेरे db में डाली गई तारीख गलत है और हर पंक्ति के लिए समान है ...

 String date = Sat Mar 04 09:54:20 EET 2017;
 SimpleDateFormat formatnow = new SimpleDateFormat("EEE MMM dd HH:mm:ss ZZZ yyyy"); 
 SimpleDateFormat formatneeded=new SimpleDateFormat("YYYY-MM-DD");

 java.util.Date date1 = (java.util.Date)formatnow.parse(date);
 String date2 = formatneeded.format(date1);
 java.util.Date date3= (java.util.Date)formatneeded.parse(date2);


 java.sql.Date sqlDate = new java.sql.Date( date3.getTime() );
 pst.setDate(1, sqlDate);

    LocalDate date4 = ZonedDateTime
            .parse(date, DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss zzz yyyy", Locale.ENGLISH))
            .toLocalDate();
    java.sql.Date date5 = java.sql.Date.valueOf(date4);

मैं java.time पैकेज में आधुनिक कक्षाओं का उपयोग कर रहा हूं। आप ध्यान दें कि कोड केवल सरल नहीं है, एक बार जब आप नए वर्गों की धाराप्रवाह लेखन शैली से परिचित हो जाते हैं, तो यह भी स्पष्ट हो जाता है।

यदि आप 100% आधुनिक होना चाहते हैं, तो आपको यह भी देखना चाहिए कि क्या आपका नवीनतम MySQL JDBC ड्राइवर java.sql.Date रूपांतरण के बिना सीधे LocalDate स्वीकार नहीं करेगा। यह होना चाहिए।

नोट करने के लिए कुछ विवरण

  • यदि आपको अपने नियंत्रण के बाहर कंप्यूटर पर चलाने के लिए आपके कोड की आवश्यकता होती है, तो हमेशा अपने फ़ॉर्मेटर को लोकेल दें, या आपके दिनांक स्ट्रिंग को गैर-अंग्रेजी बोलने वाले लोकेल वाले कंप्यूटर पर पार्स नहीं किया जा सकता है। आप लोकल न्यूट्रल लोकेल के लिए Locale.ROOT उपयोग कर सकते हैं (इसे अंग्रेजी बोलते हैं)।
  • यदि आप कर सकते हैं, तो तीन पत्र समय क्षेत्र संक्षिप्तताओं से बचें। कई अस्पष्ट हैं। ईईटी वास्तव में केवल आधा समय क्षेत्र है क्योंकि कुछ स्थानों पर जहां इसका उपयोग किया जाता है वे अब ईईएसटी (गर्मी के समय) पर हैं। Europe/Bucharest जैसी लंबे समय की ज़ोन आईडी या यूटीसी से एक ऑफसेट का उपयोग करने के लिए बेहतर है जैसे +02:00

यदि आप DateTimeFormatter या SimpleDateFormat उपयोग करते हैं, तो ये बिंदु कोई मायने नहीं SimpleDateFormat

यदि आप अनुशंसित नई कक्षाओं में नहीं जा सकते हैं या नहीं चाहते हैं, तो आपके कोड का निर्धारण इस प्रकार है:

    SimpleDateFormat formatnow 
            = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", Locale.ENGLISH); 
    SimpleDateFormat formatneeded = new SimpleDateFormat("yyyy-MM-dd");

मैं लोअरकेस zzz का उपयोग कर रहा हूं क्योंकि यह तीन-पत्र समय क्षेत्र के नाम से मेल करने के लिए प्रलेखित है, मुझे पता है कि अपरकेस ZZZ भी काम करता है। मैंने लोकल जोड़ा है। और शायद सबसे महत्वपूर्ण रूप से, आवश्यक प्रारूप में मैंने YYYY (सप्ताह-आधारित वर्ष) को yyyy (कैलेंडर वर्ष) और DD (वर्ष का dd ) से dd (महीने का दिन) में बदल दिया है। वे सभी पत्र प्रलेखन में हैं





date