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

Как конвертировать дату в формат yyyy-MM-dd?

Сб Дек 01 00:00:00 GMT 2012

Мне нужно преобразовать вышеуказанную дату в формат ниже

2012-12-01

Как я могу?

Я попробовал следующий метод, но не работал

public Date ConvertDate(Date date){

    DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
    String s = df.format(date);
    String result = s;
    try {
        date=df.parse(result);
    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return date;
  }
4b9b3361

Ответ 1

Используйте это.

java.util.Date date = new Date("Sat Dec 01 00:00:00 GMT 2012");
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
String format = formatter.format(date);
System.out.println(format);

вы получите результат как

2012-12-01

Ответ 2

ОБНОВЛЕНИЕ Мой ответ здесь устарел. Проект Joda-Time теперь находится в режиме обслуживания, советуя перейти на классы java.time. См. Современное решение в Ответа Ole V.V..

Joda времени

Принятый ответ NidhishKrishnan является правильным.

Для удовольствия, вот такой же код в Joda-Time 2.3.

// © 2013 Basil Bourque. This source code may be used freely forever by anyone taking full responsibility for doing so.
// import org.joda.time.*;
// import org.joda.time.format.*;

java.util.Date date = new Date(); // A Date object coming from other code.

// Pass the java.util.Date object to constructor of Joda-Time DateTime object.
DateTimeZone kolkataTimeZone = DateTimeZone.forID( "Asia/Kolkata" );
DateTime dateTimeInKolkata = new DateTime( date, kolkataTimeZone );

DateTimeFormatter formatter = DateTimeFormat.forPattern( "yyyy-MM-dd");
System.out.println( "dateTimeInKolkata formatted for date: " + formatter.print( dateTimeInKolkata ) );
System.out.println( "dateTimeInKolkata formatted for ISO 8601: " + dateTimeInKolkata );

При запуске...

dateTimeInKolkata formatted for date: 2013-12-17
dateTimeInKolkata formatted for ISO 8601: 2013-12-17T14:56:46.658+05:30

Ответ 3

String s;
Format formatter;
Date date = new Date();

// 2012-12-01
formatter = new SimpleDateFormat("yyyy-MM-dd");
s = formatter.format(date);
System.out.println(s);

Ответ 4

Вы не можете отформатировать Date. Вы можете получить форматированный результат только в String. Используйте SimpleDateFormat, как упоминалось другими.

Кроме того, большая часть getter methods in Date равна deprecated.

Ответ 5

Современный ответ: используйте LocalDate из java.time, современный API дат и времени Java и его метод toString:

    LocalDate date = LocalDate.of(2012, Month.DECEMBER, 1); // get from somewhere
    String formattedDate = date.toString();
    System.out.println(formattedDate);

Отпечатает

2012-12-01

Дата (независимо от того, были ли слова java.util.Date или java.time.LocalDate) не имеет формата. Весь его метод - это toString, который создает некоторый формат, и вы не можете изменить метод toString. К счастью, LocalDate.toString производит именно тот формат, который вы запросили.

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

Кроме того, вы получаете Date из устаревшего API, который вы не можете изменить или не хотите сейчас изменять. Лучшее, что вы можете сделать с ним, - преобразовать его в java.time.Instant и выполнить любые дальнейшие операции:

    Date oldfashoinedDate = // get from somewhere
    LocalDate date = oldfashoinedDate.toInstant()
            .atZone(ZoneId.of("Asia/Beirut"))
            .toLocalDate();

Пожалуйста, замените желаемый часовой пояс, если это не Азия/Бейрут. Затем действуйте так, как указано выше.

Ссылка: Учебник Oracle: время по времени, объясняющее, как использовать java.time.