Вопрос-ответ

How can I change the date format in Java? [duplicate]

Как я могу изменить формат даты в Java?

Мне нужно изменить формат даты с помощью Java из

 dd/MM/yyyy  to yyyy/MM/dd
Переведено автоматически
Ответ 1

Как преобразовать из одного формата даты в другой с помощью SimpleDateFormat:

final String OLD_FORMAT = "dd/MM/yyyy";
final String NEW_FORMAT = "yyyy/MM/dd";

// August 12, 2010
String oldDateString = "12/08/2010";
String newDateString;

SimpleDateFormat sdf = new SimpleDateFormat(OLD_FORMAT);
Date d = sdf.parse(oldDateString);
sdf.applyPattern(NEW_FORMAT);
newDateString = sdf.format(d);
Ответ 2
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
sdf.format(new Date());

Это должно сработать

Ответ 3

tl; dr

LocalDate.parse( 
"23/01/2017" ,
DateTimeFormatter.ofPattern( "dd/MM/uuuu" , Locale.UK )
).format(
DateTimeFormatter.ofPattern( "uuuu/MM/dd" , Locale.UK )
)

2017/01/23


Избегайте устаревших классов даты и времени

Ответ Кристофера Паркера правильный, но устаревший. Старые классы даты и времени, такие как java.util.Date, java.util.Calendar и java.text.SimpleTextFormat, теперь являются устаревшими, вытесненными классами java.time.

Использование java.time

Проанализируйте входную строку как объект даты-времени, затем сгенерируйте новый объект String в желаемом формате.

Класс LocalDate представляет значение только для даты без указания времени суток и часового пояса.

DateTimeFormatter fIn = DateTimeFormatter.ofPattern( "dd/MM/uuuu" , Locale.UK );  // As a habit, specify the desired/expected locale, though in this case the locale is irrelevant.
LocalDate ld = LocalDate.parse( "23/01/2017" , fIn );

Определите другой форматировщик для выходных данных.

DateTimeFormatter fOut = DateTimeFormatter.ofPattern( "uuuu/MM/dd" , Locale.UK );
String output = ld.format( fOut );

2017/01/23


Кстати, рассмотрите возможность использования стандартных форматов ISO 8601 для строк, представляющих значения даты и времени.


О java.time

Платформа java.time встроена в Java 8 и более поздних версий. Эти классы заменяют старые, вызывающие беспокойство, устаревшие классы даты и времени, такие как java.util.Date, Calendar, & SimpleDateFormat.

Проект Joda-Time, который сейчас находится в режиме обслуживания, рекомендует перейти на классы java.time.

Чтобы узнать больше, ознакомьтесь с Руководством по Oracle. И найдите в Stack Overflow множество примеров и пояснений. Спецификация - JSR 310.

Где получить классы java.time?


  • Java SE 8, Java SE 9 и более поздние версии

    • Встроенный.

    • Часть стандартного Java API с комплексной реализацией.

    • Java 9 добавляет некоторые незначительные функции и исправления.


  • Java SE 6 и Java SE 7

    • Большая часть функциональных возможностей java.time перенесена обратно на Java 6 и 7 в ThreeTen-Backport.


  • Android

Проект ThreeTen-Extra расширяет java.time дополнительными классами. Этот проект является испытательным полигоном для возможных будущих дополнений к java.time. Здесь вы можете найти несколько полезных классов, таких как Interval, YearWeek, YearQuarter и больше.


Joda-Time

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

Для развлечения, вот его код, адаптированный для использования библиотеки Joda-Time.

// © 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.*;

final String OLD_FORMAT = "dd/MM/yyyy";
final String NEW_FORMAT = "yyyy/MM/dd";

// August 12, 2010
String oldDateString = "12/08/2010";
String newDateString;

DateTimeFormatter formatterOld = DateTimeFormat.forPattern(OLD_FORMAT);
DateTimeFormatter formatterNew = DateTimeFormat.forPattern(NEW_FORMAT);
LocalDate localDate = formatterOld.parseLocalDate( oldDateString );
newDateString = formatterNew.print( localDate );

Дамп в консоль…

System.out.println( "localDate: " + localDate );
System.out.println( "newDateString: " + newDateString );

При запуске…

localDate: 2010-08-12
newDateString: 2010/08/12
Ответ 4

Используйте SimpleDateFormat

    String DATE_FORMAT = "yyyy/MM/dd";
SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
System.out.println("Formated Date " + sdf.format(date));

Полный пример:

import java.text.SimpleDateFormat;
import java.util.Date;

public class JavaSimpleDateFormatExample {
public static void main(String args[]) {
// Create Date object.
Date date = new Date();
// Specify the desired date format
String DATE_FORMAT = "yyyy/MM/dd";
// Create object of SimpleDateFormat and pass the desired date format.
SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
/*
* Use format method of SimpleDateFormat class to format the date.
*/

System.out.println("Today is " + sdf.format(date));
}
}
java date