2012-05-18 27 views
26

Tôi có ngày theo định dạng này (2012-11-17T00: 00: 00.000-05: 00). Tôi cần phải chuyển đổi ngày thành định dạng này mm/yyyy.Java: Không thể định dạng Đối tượng đã cho dưới dạng Ngày

Tôi đã thử cách này, nhưng tôi nhận được ngoại lệ này.

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) 

Xin vui lòng xem mã của tôi dưới đây:

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

Lệnh 'SimpleDateFormat # format' đòi hỏi một 'Date' dụ, không phải' chuỗi'. Vì vậy, bạn nên chuyển đổi chuỗi thành 'Date' bằng' SimpleDateFormat # parse' trước. –

Trả lời

52

DateFormat.format chỉ hoạt động trên Date giá trị.

Bạn nên sử dụng hai đối tượng SimpleDateFormat: một đối tượng phân tích cú pháp và một để định dạng. Ví dụ:

// 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); 

EDIT: Lưu ý rằng bạn cũng có thể muốn xác định múi giờ và/hoặc địa phương trong các định dạng của bạn, và bạn nên cũng xem xét sử dụng Joda Time thay vì tất cả những điều này để bắt đầu - đó là API ngày/giờ tốt hơn nhiều.

+0

Câu trả lời của bạn có vẻ tốt hơn tôi, tôi có thêm một câu hỏi, làm thế nào tôi có thể nhận được chỉ là ngày (2012-11-17T00: 00: 00.000-05: 00) là 17 từ này ?? – Pawan

+0

@ yyyi777: Là một chuỗi hoặc dưới dạng giá trị số nguyên? –

+0

Là một chuỗi chỉ – Pawan

4

Bạn có một DateFormat, nhưng bạn cần hai: một cho đầu vào, và một cho đầu ra.

Bạn đã có một đầu ra, nhưng tôi không thấy bất kỳ thứ gì khớp với thông tin bạn nhập. Khi bạn cung cấp chuỗi đầu vào cho định dạng đầu ra, không có gì ngạc nhiên khi bạn thấy ngoại lệ đó.

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

SimpleDateFormat.format(...) lấy ngày làm thông số và định dạng Ngày thành chuỗi. Vì vậy, bạn cần có một API cái nhìn cẩn thận

1

tôi đã giải quyết nó, cách này

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; 
} 

Tôi nghĩ rằng mã này có thể giải quyết vấn đề của bạn.

0

này đã làm việc cho tôi:

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); 
Các vấn đề liên quan