2012-05-18 11 views
26

के रूप में प्रारूपित नहीं किया जा सकता है मेरे पास इस प्रारूप में दिनांक है (2012-11-17T00: 00: 00.000-05: 00)। मुझे तिथि को इस प्रारूप में कनवर्ट करने की जरूरत है mm/yyyy।जावा: दिए गए ऑब्जेक्ट को दिनांक

मैंने इस तरह से प्रयास किया, लेकिन मुझे यह अपवाद मिल रहा है।

Exception in thread "main" java.lang.IllegalArgumentException: Cannot format given Object as a Date 
    at java.text.DateFormat.format(Unknown Source) 
    at java.text.Format.format(Unknown Source) 
    at DateParser.main(DateParser.java:14) 

कृपया नीचे मेरी कोड देखें:

import java.text.SimpleDateFormat; 
import java.util.Date; 

public class DateParser {  
    public static void main(String args[]) { 
     String MonthYear = null;  
     SimpleDateFormat simpleDateFormat = new SimpleDateFormat("mm/yyyy");  
     String dateformat = "2012-11-17T00:00:00.000-05:00 
     MonthYear = simpleDateFormat.format(dateformat);  
     System.out.println(MonthYear);  
    }  
} 
+1

'SimpleDateFormat # format' एक' Date' उदाहरण की आवश्यकता होती है, नहीं 'स्ट्रिंग'। तो आपको पहले 'SimpleDateFormat # parse' द्वारा स्ट्रिंग को' दिनांक' में परिवर्तित करना चाहिए। –

उत्तर

52

DateFormat.format केवल Date मूल्यों पर काम करता है।

आपको दो SimpleDateFormat ऑब्जेक्ट्स का उपयोग करना चाहिए: एक पार्सिंग के लिए, और फ़ॉर्मेटिंग के लिए एक। उदाहरण के लिए:

// Note, MM is months, not mm 
DateFormat outputFormat = new SimpleDateFormat("MM/yyyy"); 
DateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSX"); 

String inputText = "2012-11-17T00:00:00.000-05:00"; 
Date date = inputFormat.parse(inputText); 
String outputText = outputFormat.format(date); 

संपादित करें: ध्यान दें कि आप अच्छी तरह से समय क्षेत्र और/या अपने स्वरूपों में भाषा निर्दिष्ट कर सकते हैं कि, और आप भी इस सब के बजाय Joda Time उपयोग करने के साथ शुरू करने के लिए विचार करना चाहिए - यह है एक बेहतर तिथि/समय एपीआई।

+0

आपका उत्तर मेरे से अच्छा दिखता है, मेरे पास एक और सवाल है, मैं केवल तारीख कैसे प्राप्त कर सकता हूं (2012-11-17T00: 00: 00.000-05: 00) यह 17 है ?? – Pawan

+0

@ yyyi777: एक स्ट्रिंग के रूप में, या एक पूर्णांक मान के रूप में? –

+0

स्ट्रिंग के रूप में केवल – Pawan

4

आप एक DateFormat है, लेकिन आप दो की जरूरत है: इनपुट के लिए एक है, और उत्पादन के लिए एक और।

आपके पास आउटपुट के लिए एक है, लेकिन मुझे आपके इनपुट से मेल खाने वाली कोई भी चीज़ दिखाई नहीं दे रही है। जब आप आउटपुट प्रारूप में इनपुट स्ट्रिंग देते हैं, तो इसमें कोई आश्चर्य की बात नहीं है कि आप उस अपवाद को देखते हैं।

DateFormat inputDateFormat = new SimpleDateFormat("yyyy-MM-ddhh:mm:ss.SSS-Z"); 
4

SimpleDateFormat.format(...) पैरामीटर के रूप में एक तिथि लेता है और स्ट्रिंग के लिए प्रारूप दिनांक। तो आप एक बार देख एपीआई ध्यान से

1

मैं इसे समाधान कर लिया है, इस तरह से

import java.text.DateFormat; 
import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.Date; 
import java.util.Locale; 

public class DateParser { 

    public static void main(String args[]) throws Exception { 

     DateParser dateParser = new DateParser(); 

     String str = dateParser.getparsedDate("2012-11-17T00:00:00.000-05:00"); 
     System.out.println(str); 
    } 


    private String getparsedDate(String date) throws Exception { 
     DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS", Locale.US); 
     String s1 = date; 
     String s2 = null; 
     Date d; 
     try { 
      d = sdf.parse(s1); 
      s2 = (new SimpleDateFormat("MM/yyyy")).format(d); 

     } catch (ParseException e) { 

      e.printStackTrace(); 
     } 

     return s2; 

    } 

} 
0
public static String showDate(){ 
    SimpleDateFormat df=new SimpleDateFormat("\nTime:yyyy-MM-dd HH:mm:ss"); 
    System.out.println(df.format(new Date())); 
    String s=df.format(new Date()); 
    return s; 
} 

मुझे लगता है कि इस कोड को अपनी समस्या को हल हो सकता है की जरूरत है।

0

यह मेरे लिए काम किया:

String dat="02/08/2017"; 
long date=new SimpleDateFormat("dd/MM/yyyy").parse(dat,newParsePosition(0)).getTime(); 
java.sql.Date dbDate=new java.sql.Date(date); 
System.out.println(dbDate); 
संबंधित मुद्दे