Подтвердить что ты не робот

Java: невозможно форматировать данный объект как дату

У меня есть дата в этом формате (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);    
    }    
}
4b9b3361

Ответ 1

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 даты/времени.

Ответ 2

У вас есть один DateFormat, но вам нужны два: один для ввода, а другой для вывода.

У вас есть один для вывода, но я не вижу ничего, что бы соответствовало вашим данным. Когда вы вводите строку ввода в выходной формат, неудивительно, что вы видите это исключение.

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

Ответ 3

SimpleDateFormat.format(...) принимает дату как параметр и формат Date to String. Поэтому вам нужно внимательно изучить API

Ответ 4

Я решил это, таким образом

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;

    }

}

Ответ 5

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

Я думаю, что этот код может решить вашу проблему.

Ответ 6

Это сработало для меня:

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