Как конвертировать дату в формат 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;
}
Ответы
Ответ 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
.