जावा में yyyy-MM-dd प्रारूप के लिए कैलेंडर की तारीख


210

कैलेंडर की तारीख को yyyy-MM-ddप्रारूप में कैसे बदलें।

Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, 1);
Date date = cal.getTime();             
SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd");
String date1 = format1.format(date);            
Date inActiveDate = null;
try {
    inActiveDate = format1.parse(date1);
} catch (ParseException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
}

इससे उत्पादन होगा inActiveDate = Wed Sep 26 00:00:00 IST 2012। लेकिन मुझे क्या चाहिए 2012-09-26। मेरा उद्देश्य हाइबरनेट मापदंडों का उपयोग करके अपने डेटाबेस में किसी अन्य तिथि के साथ इस तिथि की तुलना करना है। इसलिए मुझे yyyy-MM-ddप्रारूप में दिनांक ऑब्जेक्ट की आवश्यकता है ।


5
आप कोड भ्रमित कर रहे हैं। क्या आप एक मूल्य से एक स्ट्रिंग को प्रारूपित या पार्स Dateकरने की कोशिश कर रहे हैं ?? दिनांक को प्रारूपित करने के लिए, बस , इसे पार्स करने के लिए, उपयोग करेंyyyy-MM-ddyyyy-MM-ddDateformat1.format(date)format1.parse(someStringValueInTheCorrectFormat)
MadProgrammer

मैंने अपना प्रश्न संपादित किया है .. पिछली गलती के लिए क्षमा करें ..
सारिका।

9
एक लाइनर:( new SimpleDateFormat( "yyyy-MM-dd'T'HH:mm:ss.SSSXXX" ) ).format( Calendar.getInstance().getTime() );
इवान ऑकम्प

जवाबों:


342

Date1 जनवरी, 1970, 00:00:00 GMT के बाद से एक जावा मिलीसेकंड की संख्या के लिए एक कंटेनर है।

जब आप कुछ का उपयोग करते हैं System.out.println(date), तो जावा Date.toString()सामग्री को प्रिंट करने के लिए उपयोग करता है।

इसे बदलने का एकमात्र तरीका ओवरराइड करना Dateऔर अपना खुद का कार्यान्वयन प्रदान करना है Date.toString()। अब इससे पहले कि आप अपनी आईडीई को आग लगाते हैं और यह कोशिश करते हैं, मैं नहीं करूंगा; यह केवल मामलों को जटिल करेगा। आप उस दिनांक को स्वरूपित करने से बेहतर हैं जिस प्रारूप का आप उपयोग करना चाहते हैं (या प्रदर्शित)।

जावा 8+

LocalDateTime ldt = LocalDateTime.now().plusDays(1);
DateTimeFormatter formmat1 = DateTimeFormatter.ofPattern("yyyy-MM-dd", Locale.ENGLISH);
System.out.println(ldt);
// Output "2018-05-12T17:21:53.658"

String formatter = formmat1.format(ldt);
System.out.println(formatter);
// 2018-05-12

जावा 8 से पहले

आपको थ्रीटेन बैकपोर्ट का उपयोग करना चाहिए

निम्नलिखित ऐतिहासिक उद्देश्यों के लिए बनाए रखा गया है (मूल उत्तर के रूप में)

आप क्या कर सकते हैं, तारीख प्रारूप है।

Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, 1);
SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd");
System.out.println(cal.getTime());
// Output "Wed Sep 26 14:23:28 EST 2012"

String formatted = format1.format(cal.getTime());
System.out.println(formatted);
// Output "2012-09-26"

System.out.println(format1.parse(formatted));
// Output "Wed Sep 26 00:00:00 EST 2012"

ये वास्तव में एक ही तिथि हैं, अलग-अलग प्रतिनिधित्व किया।


1
तरह, लेकिन यह बहुत आसान हैCalendar
MadProgrammer

1
वैसे भी इस कैलेंडर वस्तु से पूरी तरह से टाइमज़ोन निकालने के लिए?
सारिका।

2
यदि आप तारीख / समय हेरफेर के बारे में वास्तव में गंभीर हैं , तो जोडा टाइम पर एक नज़र डालें , यह काफी आसान है, फिर उसके साथ खिलवाड़ करनाCalendar
MadProgrammer

2
@ n13 यदि प्रश्न डेटाबेस डेट मैनिपुलेशन या यहां तक ​​कि समय हेरफेर के बारे में था, तो मैं आपसे सहमत हो सकता हूं। सवाल यह था कि विशेष तिथि प्रारूप में दिनांक मान का प्रतिनिधित्व कैसे किया जाए
MadProgrammer

1
अच्छी तरह से संरचित उत्तर - यह मूल रूप से मॉडल (दिनांक) -दृश्य (प्रारूप) पृथक्करण है।
योयो

19

आपका कोड गलत है। पार्सिंग तिथि का कोई मतलब नहीं है और इसे दिनांक ऑब्जेक्ट के रूप में रखें।

आप कैलेंडर तिथि ऑब्जेक्ट को तब प्रदर्शित कर सकते हैं जब आप उसे एक स्ट्रिंग के रूप में प्रदर्शित और रखना चाहते हैं।

Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, 1);
Date date = cal.getTime();             
SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd");          
String inActiveDate = null;
try {
    inActiveDate = format1.format(date);
    System.out.println(inActiveDate );
} catch (ParseException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
}

13

java.time

MadProgrammer द्वारा जवाब सही है, के बारे में विशेष रूप से टिप है Joda समय । जोडा-टाइम का उत्तराधिकारी अब जावा 8 में नए java.time पैकेज के रूप में बनाया गया है । यहाँ उदाहरण 8 जावा में कोड है।

जब दिनांक-समय (स्थानीय तिथि के विपरीत) के साथ काम कर रहे हों, तो आलोचनात्मक समय क्षेत्र । दिन का समय समय क्षेत्र पर निर्भर करता है। उदाहरण के लिए, भारत समय क्षेत्र है +05:30, जबकि (साढ़े पांच घंटे आगे यूटीसी के) फ्रांस केवल एक घंटे आगे है। इसलिए भारत में एक नए दिन में एक दिन एक तारीख है जबकि फ्रांस में एक ही पल में "कल" ​​की तारीख है। किसी भी समय क्षेत्र या ऑफसेट जानकारी का अभाव स्ट्रिंग उत्पादन बनाना अस्पष्टता पैदा कर रहा है। आपने YYYY-MM-DD आउटपुट के लिए कहा तो मैंने प्रदान किया, लेकिन मैं इसकी सिफारिश नहीं करता। इसके बजाय ISO_LOCAL_DATEमैं ISO_DATEइस उत्पादन प्राप्त करने के लिए इस्तेमाल किया होता:2014-02-25+05:30

ZoneId zoneId = ZoneId.of( "Asia/Kolkata" );
ZonedDateTime zonedDateTime = ZonedDateTime.now( zoneId );

DateTimeFormatter formatterOutput = DateTimeFormatter.ISO_LOCAL_DATE; // Caution: The "LOCAL" part means we are losing time zone information, creating ambiguity.
String output = formatterOutput.format( zonedDateTime );

सांत्वना दें…

System.out.println( "zonedDateTime: " + zonedDateTime );
System.out.println( "output: " + output );

जब चला…

zonedDateTime: 2014-02-25T14:22:20.919+05:30[Asia/Kolkata]
output: 2014-02-25

Joda समय

जोडा-टाइम लाइब्रेरी का उपयोग करने वाला समान कोड , java.time का अग्रदूत।

DateTimeZone zone = new DateTimeZone( "Asia/Kolkata" );
DateTime dateTime = DateTime.now( zone );
DateTimeFormatter formatter = ISODateTimeFormat.date();
String output = formatter.print( dateTime );

आईएसओ 8601

वैसे, आपके इनपुट स्ट्रिंग का वह प्रारूप एक मानक प्रारूप है, जो आईएसओ 8601 द्वारा परिभाषित कई आसान तिथि-समय स्ट्रिंग स्वरूपों में से एक है

Joda-Time और java.time दोनों आईएसओ 8601 प्रारूपों का उपयोग डिफ़ॉल्ट रूप से करते हैं जब विभिन्न दिनांक-समय मानों के स्ट्रिंग प्रतिनिधित्व को पार्स और उत्पन्न करते हैं।


6

java.util.Dateऑब्जेक्ट कस्टम प्रारूप में तारीख का प्रतिनिधित्व नहीं कर सकता है इसके बजाय आप उस पद्धति का उपयोग करते हैं जो वापस आती है ।SimpleDateFormat.formatstring

String myString=format1.format(date);

2

किसी java.util.Dateवस्तु को पार्स करने के लिए आपको उसे अपने स्वरूप का उपयोग करके पहले स्ट्रिंग में बदलना होगा।

inActiveDate = format1.parse(  format1.format(date)  );

लेकिन मेरा मानना ​​है कि आप यहां बेमानी हो रहे हैं।


2
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, 7);
Date date = c.getTime();
SimpleDateFormat ft = new SimpleDateFormat("MM-dd-YYYY");
JOptionPane.showMessageDialog(null, ft.format(date));

यह आपकी तिथि + माह में 7 दिन, दिन और वर्ष प्रारूप को एक ज्‍वाइंटेशन विंडो फलक में प्रदर्शित करेगा।


2
public static void main(String[] args) {
    Calendar cal = Calendar.getInstance();
    cal.set(year, month, date);
    SimpleDateFormat format1 = new SimpleDateFormat("yyyy MM dd");
    String formatted = format1.format(cal.getTime());
    System.out.println(formatted);
}

2
एसओ में आपका स्वागत है। कृपया कुछ संदर्भ / स्पष्टीकरण जोड़ें, क्योंकि कोड केवल उत्तर हमारे मानकों को पूरा नहीं करते हैं। देखें stackoverflow.com/help/how-to-answer
उवे Allner

0

मुझे यह कोड मिला है जहाँ डेटाबेस में दिनांक फ़ील्ड के साथ तुलना करने के लिए दिनांक की तुलना एक प्रारूप में की जाती है ... हो सकता है कि यह आपके लिए उपयोगी हो ...

जब आप स्ट्रिंग को दिनांकित करते हुए सरलीकृत रूप में प्रयोग करते हैं, तो mysql डेटाबेस में दिनांक फ़ील्ड के साथ तुलना करना कठिन होता है।

इसलिए इस प्रारूप में चुनिंदा STR_to_DATE ('yourdate', '% m /% d /% Y') -> का उपयोग करके प्रारूप में जावा स्ट्रिंग तिथि परिवर्तित करें, फिर आपको mysql दिनांक फ़ील्ड का सटीक दिनांक स्वरूप मिल जाएगा।

http://javainfinite.com/java/java-convert-string-to-date-and-compare/


3
लिंक-रोट और अन्य मुद्दों के कारण लिंक-ओनली उत्तर StackOverflow पर हतोत्साहित किए जाते हैं। क्या आप मुख्य बिंदुओं के साथ जानकारी का सारांश दे सकते हैं?
बेसिल बॉर्क

0
public static String ThisWeekStartDate(WebDriver driver) {
        Calendar c = Calendar.getInstance();
        //ensure the method works within current month
        c.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
        System.out.println("Before Start Date " + c.getTime());
        Date date = c.getTime();

          SimpleDateFormat dfDate = new SimpleDateFormat("dd MMM yyyy hh.mm a");

          String CurrentDate = dfDate.format(date);
          System.out.println("Start Date " + CurrentDate);
          return CurrentDate;

    }
    public static String ThisWeekEndDate(WebDriver driver) {

        Calendar c = Calendar.getInstance();
        //ensure the method works within current month
        c.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);
        System.out.println("Before End Date " + c.getTime());
        Date date = c.getTime();

          SimpleDateFormat dfDate = new SimpleDateFormat("dd MMM yyyy hh.mm a");

          String CurrentDate = dfDate.format(date);
          System.out.println("End Date " + CurrentDate);
          return CurrentDate;
    }
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.