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

33

У меня есть Дата в этом формате (2012-11-17T00: 00: 00.000-05: 00). Мне нужно конвертировать дату в этот формат мм / гггг.

Я пытался таким образом, но я получаю это исключение.

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);    
    }    
}
SimpleDateFormat#format требоватьDate например, неString, Таким образом, вы должны преобразовать строку вDate отSimpleDateFormat#parse первый. Tu Tran

Ваш Ответ

7   ответов
4

DateFormat, но вам нужно два: один для ввода, а другой для вывода.

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

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

SimpleDateFormat класс, как известно, проблематичен, и хотя было разумно бороться с ним, когда этот вопрос был задан шесть с половиной лет назад, сегодня у нас гораздо лучше в java.time, современном Java-API даты и времени ,SimpleDateFormat и его другDate в настоящее время считаются давно устаревшими, поэтому не используйте их больше.

    DateTimeFormatter monthFormatter = DateTimeFormatter.ofPattern("MM/uuuu");
    String dateformat = "2012-11-17T00:00:00.000-05:00";
    OffsetDateTime dateTime = OffsetDateTime.parse(dateformat);
    String monthYear = dateTime.format(monthFormatter);
    System.out.println(monthYear);

Выход:

11/2012

Я использую тот факт, что ваша строка имеет формат ISO 8601, международный стандарт, и что классы java.time анализируют этот формат как свой формат по умолчанию, то есть без какого-либо явного форматера. Все равно, как говорят другие ответы, сначала нужно проанализировать исходную строку, а затем отформатировать полученный объект даты и времени в новую строку. Обычно для этого требуется два средства форматирования, только в этом случае нам повезло, и мы можем использовать только один модуль форматирования.

What went wrong in your code As others have said, SimpleDateFormat.format cannot accept a String argument, also when the parameter type is declared to be Object. Because of the exception you didn’t get around to discovering: there is also a bug in your format pattern string, mm/yyyy. Lowercase mm os for minute of the hour. You need uppercase MM for month. Finally the Java naming conventions say to use a lowercase first letter in variable names, so use lowercase m in monthYear (also because java.time includes a MonthYear class with uppercase M, so to avoid confusion). Links Oracle tutorial: Date Time explaining how to use java.time. Wikipedia article: ISO 8601
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;
}

4

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

61

DateFormat.format работает только наDate ценности.

Вам следует использовать два объекта SimpleDateFormat: один для разбора, а другой для форматирования. Например:

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

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

РЕДАКТИРОВАТЬ: Обратите внимание, что вы можете указать часовой пояс и / или локаль в своих форматах, и вам следуетalso рассмотреть возможность использованияВремя йода вместо того, чтобы начинать все это - это намного лучший API даты / времени.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Pawan
Error: User Rate Limit Exceeded Pawan
Error: User Rate Limit Exceeded Pawan
2

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

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

Похожие вопросы