जोडा टाइम लाइब्रेरी का उपयोग करके एक डेट टाइमटाइम ऑब्जेक्ट को स्ट्रिंग प्रदान करना


246

मेरे पास निम्न प्रारूप में एक स्ट्रिंग के रूप में एक तारीख है "04/02/2011 20:27:05"। मैं जोडा-टाइम लाइब्रेरी का उपयोग कर रहा हूं और इसे DateTimeऑब्जेक्ट में बदलना चाहूंगा । मैंने किया:

DateTime dt = new DateTime("04/02/2011 20:27:05")

लेकिन मुझे निम्नलिखित त्रुटि मिल रही है:

Invalid format: "04/02/2011 14:42:17" is malformed at "/02/2011 14:42:17"

उपरोक्त दिनांक को किसी DateTimeवस्तु में कैसे बदलें?


2
यहां पहुंचने के किसी को भी कैसे का उपयोग करने की तारीख स्ट्रिंग्स पार्स करने के लिए की तलाश में के लिए java.timeजावा 8 में पैकेज का उपयोग करके देखें LocalDateTime.parseया Instant.parse
हेनेनी

1
FYI करें, जोडा-टाइम परियोजना अब रखरखाव मोड में है , जिसमें टीम java.time कक्षाओं में प्रवास की सलाह दे रही है । ओरेकल द्वारा ट्यूटोरियल देखें ।
बेसिल बॉर्क

जवाबों:


477

उपयोग करें DateTimeFormat:

DateTimeFormatter formatter = DateTimeFormat.forPattern("dd/MM/yyyy HH:mm:ss");
DateTime dt = formatter.parseDateTime(string);

2
नमस्ते, क्या यह संभव है कि फ़ॉर्मेटर टाइमज़ोन स्वीकार नहीं करता है? "zz" toStringफ़ंक्शन को लागू करते समय "MEZ" लौटाता है , लेकिन मैं इससे पार्स नहीं कर सकता Invalid format: "31. Januar 2013 06:38:08 MEZ" is malformed at "MEZ":। क्या यह जाना पहचाना हुआ मुद्दा है? मैं इससे कैसे बच सकता हूं? सादर।
डेनियल

2
@ डैनियल: आप इस DateTimeFormat.forPattern ("yyyy-MM-dd'T'HH: mm: ss.SSS'Z ')) .withLocale (Locale.ROOT) .withChronology (ISOChronology.getInstanceUTC) जैसे टाइमज़ोन जोड़ सकते हैं। ;
हाईक

2
मुझे एक अमान्य प्रारूप मिलता है: "2014-11-04T17: 41: 52.000 + 01: 00" निम्नलिखित फ़ॉर्मेटर के साथ "+01: 00" पर विकृत है: निजी स्थिर अंतिम DateTimeFormatter DATE_TIME_FORMATIT = DateTimeFormat.forPattern ("yyyy-MM-" dd'T'HH: mm: ss.SSS'ZZ ' "); DATE_TIME_FORMATTER.parseDateTime ((स्ट्रिंग) customSoftware.get (हेडर [3]) पर joda-time 2.2
स्टीफन

2
ZZ के आसपास सिंगल कोट्स को हटाने के बाद यह काम करता है। मुझे आश्चर्य है कि इन एकल उद्धरणों का क्या मतलब है ...
स्टीफन

2
@StephaneEybert (या किसी और) एकल उद्धरण का अर्थ है कि कुछ स्ट्रिंग में अपेक्षित शाब्दिक चरित्र है, और इसे पैटर्न का हिस्सा नहीं माना जाना चाहिए। उदाहरण के लिए: यदि आपकी तिथि किसी कारण से "2015-08-dd30" के रूप में आती है, तो आप "yyyy-MM-'Ddd'dd" निर्दिष्ट करेंगे, यह दर्शाता है कि पहला dd स्ट्रिंग में शाब्दिक भाग है, और स्ट्रिंग में अपेक्षित है। दूसरा डीडी (एपोस्ट्रोफ के बाहर) वास्तविक दिन है जिसे पार्स करने की आवश्यकता है। तो आपके पहले के मामले में यह काम किया होता अगर वास्तविक टाइमज़ोन के बजाय आप अपने आने वाले डेटाइम-स्ट्रिंग के अंत में "ZZ" डालते।
सैडबनी

62

मुझे पता है कि यह एक पुराना सवाल है, लेकिन मैं इसे जोड़ना चाहता था, जैसे कि JodaTime 2.0, आप इसे वन-लाइनिन के साथ कर सकते हैं:

DateTime date = DateTime.parse("04/02/2011 20:27:05", 
                  DateTimeFormat.forPattern("dd/MM/yyyy HH:mm:ss"));

3
मुझे आयात अनुभाग में क्या रखना चाहिए?
दिमित्री

20
DateTimeFormat.forPattern("dd/MM/yyyy HH:mm:ss").parseDateTime("04/02/2011 20:27:05");

7
होना चाहिए: DateTimeFormat.forPattern ( "dd / mm / YYYY HH: mm: ss") parseDateTime ( "2011/04/02 20:27:05")।
sufinawaz

16

टिप्पणियों से मैंने एक जवाब पसंद किया और टाइमजोन को भी जोड़ा:

String dateTime = "2015-07-18T13:32:56.971-0400";

DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZZ")
        .withLocale(Locale.ROOT)
        .withChronology(ISOChronology.getInstanceUTC());

DateTime dt = formatter.parseDateTime(dateTime);

13

आपका प्रारूप अपेक्षित आईएसओ प्रारूप नहीं है, आपको कोशिश करनी चाहिए

DateTimeFormatter format = DateTimeFormat.forPattern("dd/MM/yyyy HH:mm:ss");
DateTime time = format.parseDateTime("04/02/2011 20:27:05");

5

तुम भी SimpleDateFormat का उपयोग कर सकते हैं , के रूप मेंDateTimeFormat

Date startDate = null;
Date endDate = null;
try {
    if (validDateStart!= null) startDate = new SimpleDateFormat("MM/dd/yyyy HH:mm", Locale.ENGLISH).parse(validDateStart + " " + validDateStartTime);
    if (validDateEnd!= null) endDate = new SimpleDateFormat("MM/dd/yyyy HH:mm", Locale.ENGLISH).parse(validDateEnd + " " + validDateEndTime);
} catch (ParseException e) {
    e.printStackTrace();
}

3
kirlisakal इस मामले में नहीं है, लेकिन एक SimpleDateFormat का साझा उदाहरण नहीं बनाते हैं क्योंकि यह थ्रेड-सुरक्षित नहीं है, यदि आप करते हैं तो डिबग करना एक बुरा सपना है
dannrob

2
FYI करें, जैसे परेशानी पुराने तिथि-समय कक्षाएं java.util.Date, java.util.Calendarऔर java.text.SimpleDateFormatअब कर रहे हैं विरासत , द्वारा का स्थान ले लिया java.time जावा 8 और जावा 9. देखें में बनाया गया वर्गों ओरेकल द्वारा ट्यूटोरियल । और java.time कक्षाएं विरासत की कक्षाओं के विपरीत, थ्रेड-सेफ हैं।
बेसिल बॉर्क

3

आपके द्वारा उपयोग किए जा रहे प्रारूप के लिए आपको DateTimeFormatter उपयुक्त होना चाहिए। एक का निर्माण करने के निर्देशों के लिए डॉक्स पर एक नज़र डालें।

कफ से, मुझे लगता है कि आपको जरूरत है format = DateTimeFormat.forPattern("M/d/y H:m:s")


3

tl; डॉ

java.time.LocalDateTime.parse( 
    "04/02/2011 20:27:05" , 
    DateTimeFormatter.ofPattern( "dd/MM/uuuu HH:mm:ss" )
)

java.time

आधुनिक दृष्टिकोण java.time वर्गों का उपयोग करता है जो आदरणीय Joda-Time परियोजना को दबा देता है ।

LocalDateTimeआपके इनपुट के रूप में पार्स में समय क्षेत्र या ऑफ़सेट-यूटीसी के किसी भी संकेतक का अभाव है।

String input = "04/02/2011 20:27:05" ;
DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd/MM/uuuu HH:mm:ss" ) ;
LocalDateTime ldt = LocalDateTime.parse( input , f ) ;

ldt.toString (): 2011-02-04T20: 27: 05

युक्ति: जहाँ संभव हो, यहाँ देखे गए प्रारूप के बजाय दिनांक-समय मानों को पाठ के रूप में बदलते समय मानक ISO 8601 प्रारूपों का उपयोग करें। आसानी से, java.time कक्षाएं स्टैण्डर्ड / जनरेटिंग स्ट्रिंग्स को बनाते समय मानक प्रारूपों का उपयोग करती हैं।


जावा के बारे में

Java.time ढांचे जावा 8 और बाद में बनाया गया है। इन कक्षाओं परेशानी वर्ष प्रतिस्थापित विरासत जैसे तिथि-समय कक्षाएं java.util.Date, Calendar, और SimpleDateFormat

अब जोडा-टाइम परियोजना, रखरखाव मोड में , java.time कक्षाओं में प्रवासन की सलाह देती है ।

अधिक जानने के लिए, Oracle ट्यूटोरियल देखें । और कई उदाहरणों और स्पष्टीकरणों के लिए ढेर अतिप्रवाह खोजें। विशिष्टता JSR 310 है

Java.time कक्षाएं कहाँ से प्राप्त करें?

ThreeTen-अतिरिक्त परियोजना अतिरिक्त कक्षाओं के साथ java.time फैली हुई है। यह परियोजना java.time के लिए भविष्य के संभावित अतिरिक्त के लिए एक साबित जमीन है। आप यहाँ कुछ उपयोगी वर्गों जैसे मिल सकता है Interval, YearWeek, YearQuarter, और अधिक


2

एक सरल विधि:

public static DateTime transfStringToDateTime(String dateParam, Session session) throws NotesException {
    DateTime dateRetour;
    dateRetour = session.createDateTime(dateParam);                 

    return dateRetour;
}

0

दो तरीके हैं जिनसे यह हासिल किया जा सकता है

DateTimeFormat

DateTimeFormat.forPattern("dd/MM/yyyy HH:mm:ss").parseDateTime("04/02/2011 20:27:05");

SimpleDateFormat

        String dateValue = "04/02/2011 20:27:05";
        SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); //  04/02/2011 20:27:05

        Date date = sdf.parse(dateValue); // returns date object
        System.out.println(date); // outputs: Fri Feb 04 20:27:05 IST 2011

दोनों थर्म वृद्ध। एक आधुनिक तरीका भी है; यह उत्तर में बेसिल बॉर्क द्वारा दिया गया है । इसके अलावा, आप कुछ भी योगदान नहीं दे रहे हैं जो पहले से ही कई अन्य उत्तरों में नहीं है। और जब जोडा-टाइम के लिए कहा जाता है, तो मेरे सबसे ईमानदार राय में और भी पुरानी और कुख्यात परेशानियों SimpleDateFormatका सुझाव देना बुरा है।
ओले वीवी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.