केवल मिमी / dd / yyyy के लिए Joda-Time DateTime को कैसे प्रारूपित करें?


189

मेरे पास एक स्ट्रिंग है " 11/15/2013 08:00:00", मैं इसे " 11/15/2013" प्रारूप करना चाहता हूं , सही DateTimeFormatterपैटर्न क्या है ?

मैंने कई कोशिश की है और सही पैटर्न खोजने में असमर्थ है।

संपादित करें: मुझे Joda-Time की तलाश है DateTimeFormatter , जावा के SimpleDateFormat की नहीं।


2
tl; dr: DateTimeFormat.forPattern ("MM / dd / yyyy HH: mm: ss")। प्रिंट (DateTime.now ()))
एंड्रयू

जवाबों:


385

जौदा समय

एक DateTimeFormatterउपयोग बनाएँDateTimeFormat.forPattern(String)

Joda समय का उपयोग करके आप इसे इस तरह से करेंगे:

String dateTime = "11/15/2013 08:00:00";
// Format for input
DateTimeFormatter dtf = DateTimeFormat.forPattern("MM/dd/yyyy HH:mm:ss");
// Parsing the date
DateTime jodatime = dtf.parseDateTime(dateTime);
// Format for output
DateTimeFormatter dtfOut = DateTimeFormat.forPattern("MM/dd/yyyy");
// Printing the date
System.out.println(dtfOut.print(jodatime));

मानक जावा ≥ 8

Java 8 ने एक नई Date और Time लाइब्रेरी शुरू की , जिससे तारीखों और समय का सामना करना आसान हो गया। यदि आप मानक जावा संस्करण 8 या उससे आगे का उपयोग करना चाहते हैं, तो आप DateTimeFormatter का उपयोग करेंगे । चूँकि आपके पास एक समय क्षेत्र नहीं है String, एक java.time.LocalDateTime या एक LocalDate , अन्यथा समय ज़ोनडेड ज़ोनटेड टाइम और ज़ोनडडेट का उपयोग किया जा सकता है।

// Format for input
DateTimeFormatter inputFormat = DateTimeFormatter.ofPattern("MM/dd/yyyy HH:mm:ss");
// Parsing the date
LocalDate date = LocalDate.parse(dateTime, inputFormat);
// Format for output
DateTimeFormatter outputFormat = DateTimeFormatter.ofPattern("MM/dd/yyyy");
// Printing the date
System.out.println(date.format(outputFormat));

मानक जावा <8

Java 8 से पहले, आप एक SimpleDateFormat और java.util.Date का उपयोग करेंगे

String dateTime = "11/15/2013 08:00:00";
// Format for input
SimpleDateFormat dateParser = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
// Parsing the date
Date date7 = dateParser.parse(dateTime);
// Format for output
SimpleDateFormat dateFormatter = new SimpleDateFormat("MM/dd/yyyy");
// Printing the date
System.out.println(dateFormatter.format(date7));

7
क्षमा करें, लेकिन मैं jodatime की DateTimeFormatter की तलाश कर रहा हूं।
odeodeikemmrunk

1
@ जिओ जोडा उसी प्रारूप स्ट्रिंग सिंटैक्स का उपयोग करता है SimpleDateFormat। एपीआई प्रलेखन पढ़ें।
जेसपर

@YOjiang जैसा कि जेसपर ने उल्लेख किया है, जोदा समान स्वरूपण तारों का उपयोग करता है, हालांकि इसमें अधिक विकल्प हैं। मैंने जोडा को शामिल करने के लिए उदाहरण दिया है, जैसा कि आप देख सकते हैं कि यह बहुत समान है।
डेल्टा लिमि

अजीब तरह से मैं DateTimeFormatter dtf = DateTimeFormat.forPattern ("MM / dd / yyyy") का उपयोग कर रहा हूं; और मुझे अभी भी "mm / dd / yyyy hh: mm: ss" मिलता है ...
iCodeLikeImDrunk 15

2
जबकि Joda-Time java.util.Date/Calendar के रूप में बहुत समान स्वरूपण कोड का उपयोग करता है, सूक्ष्म अंतर के लिए सावधानी से डॉक्टर को पढ़ें। वे समान नहीं हैं।
बेसिल बोर्ख

45

मैं इसे यहां जोड़ रहा हूं, हालांकि अन्य उत्तर पूरी तरह से स्वीकार्य हैं। JodaTime के पास DateTimeFormat में निर्मित पार्सर्स हैं:

dateTime.toString(DateTimeFormat.longDate());

यह उनके प्रारूप के साथ मुद्रित विकल्पों में से अधिकांश है:

shortDate:         11/3/16
shortDateTime:     11/3/16 4:25 AM
mediumDate:        Nov 3, 2016
mediumDateTime:    Nov 3, 2016 4:25:35 AM
longDate:          November 3, 2016
longDateTime:      November 3, 2016 4:25:35 AM MDT
fullDate:          Thursday, November 3, 2016
fullDateTime:      Thursday, November 3, 2016 4:25:35 AM Mountain Daylight Time

1
अच्छा, किसी भी विचार यह किस संस्करण में पेश किया गया था? बेवकूफ प्रारूप तार नहीं बनाकर बहुत समय बचा ...
iCodeLikeImDrunk

हाँ मैं पूरी तरह सहमत हूँ। ऐसा लग रहा है कि यह हमेशा से रहा है। joda-time.sourceforge.net/apidocs/org/joda/time/format/…
चाड बिंघम

21
DateTime date = DateTime.now().withTimeAtStartOfDay();
date.toString("HH:mm:ss")

1
यह उपयोगी है, हालांकि सवाल का जवाब बिल्कुल नहीं है। वन-लाइन संस्करण:DateTime.now().toString("HH:mm:ss")
hBrent

11

मुझे लगता है कि यह काम करेगा, अगर आप JodaTime का उपयोग कर रहे हैं:

String strDateTime = "11/15/2013 08:00:00";
DateTime dateTime = DateTime.parse(strDateTime);
DateTimeFormatter fmt = DateTimeFormat.forPattern("MM/dd/YYYY");
String strDateOnly = fmt.print(dateTime);

मुझे इसका हिस्सा यहां से मिला ।


प्रलेखन के लिए आपका लिंक पुराना है। सही URL है: joda.org/joda-time/apidocs/org/joda/time/format/…
तुलसी Bourque

1
@BasilBourque Dवर्ष के दिन के लिए है, लेकिन यह इंगित करने के लिए धन्यवाद , लेकिन मेरा " लिंकिंग डॉक्यूमेंटेशन" तारीख से बाहर नहीं है: मैं जिस डॉक्यूमेंटेशन से जुड़ा हुआ हूं वह पुराना है। मैं अपने स्वयं के लिए दस्तावेज़ीकरण से नहीं जोड़ रहा था, मैं उस पृष्ठ से लिंक कर रहा था जिसे मुझे कुछ कोड मिला था - जो पुराने प्रलेखन के लिए होता है।
द गाइ हैट ​​विथ द हेट

10

मेरे पास बहुत गूंगा लेकिन काम करने का विकल्प है। यदि आपके पास स्ट्रिंग पूर्ण है = "11/15/2013 08:00:00";

   String finalDate = fullDate.split(" ")[0];

यह आसान और तेज काम करना चाहिए। :)


हाँ, मैं निश्चित रूप से चारों ओर प्रारूप बदल रहा हूँ। यह काम करता है लेकिन केवल इस मामले के लिए।
iCodeLikeImDrunk

1
वास्तव में अपेक्षित व्यवहार नहीं, बाद में दोपहर (आप सहित) जो आपके कोड को देखता है समझ में नहीं आता कि आपने यहां क्या किया ...
सीरियन ओजडेमिर

3

अपडेट:

आप कर सकते हैं: एक स्थिरांक बनाएँ:

private static final DateTimeFormatter DATE_FORMATTER_YYYY_MM_DD =
          DateTimeFormat.forPattern("yyyy-MM-dd"); // or whatever pattern that you need.

यह DateTimeFormat इससे आयात कर रहा है: (इससे सावधान रहें)

आयात org.joda.time.format.DateTimeFormat; आयात org.joda.time.format.DateTimeFormatter;

दिनांक के साथ पार्स करें:

DateTime.parse(dateTimeScheduled.toString(), DATE_FORMATTER_YYYY_MM_DD);

से पहले:
DateTime.parse ("201711201515", DateTimeFormat.forPattern ("yyyMMddHHmm"))। toString ("yyyyMMdd");

अगर डेटाइम चाहते हैं:

DateTime.parse("201711201515", DateTimeFormat.forPattern("yyyyMMddHHmm")).withTimeAtStartOfDay();

2

यह काम

String x = "22/06/2012";
String y = "25/10/2014";

String datestart = x;
String datestop = y;

//DateTimeFormatter format = DateTimeFormat.forPattern("dd/mm/yyyy");
SimpleDateFormat  format = new SimpleDateFormat("dd/mm/yyyy");

Date d1 = null;
Date d2 = null;

try {
    d1 =  format.parse(datestart);
    d2 = format.parse(datestop);

    DateTime dt1 = new DateTime(d1);
    DateTime dt2 = new DateTime(d2);

    //Period
    period = new Period (dt1,dt2);

    //calculate days
    int days = Days.daysBetween(dt1, dt2).getDays();


} catch (ParseException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

1

ऐसा करने का एक और तरीका है:

String date = dateAndTime.substring(0, dateAndTime.indexOf(" "));

मैं बिल्कुल निश्चित नहीं हूं, लेकिन मुझे लगता है कि यह .split()विधि का उपयोग करने की तुलना में तेज / कम मेमोरी का उपयोग कर सकता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.