2012-05-18 8 views
26

У меня есть дата в этом формате (2012-11-17T00: 00: 00.000-05: 00). Мне нужно преобразовать дату в этот формат mm/yyyy.Java: Невозможно отформатировать данный объект как дату

Я пробовал этот путь, но я получаю это Исключение.

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' экземпляра, а не 'String'. Итак, вы должны сначала преобразовать строку в '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); 

EDIT: Обратите внимание, что вы можете захотеть указать часовой пояс и/или локаль в своих форматах, и вы должны также рассмотреть возможность использования Joda Time вместо всего этого, чтобы начать с - это гораздо лучший API даты/времени.

+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(...) принимает дату как параметр и формат Date to String. Так что вам нужно иметь взгляд API тщательно

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); 
Смежные вопросы