2010-08-12 2 views

ответ

109

Как конвертировать из одного формата в другой даты с помощью 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); 
+1

FYI, неприятные старые классы времени, такие как [' java.util.Date'] (https://docs.oracle.com/ javase/8/docs/api/java/util/Date.html), ['java.util.Calendar'] (https://docs.oracle.com/javase/8/docs/api/java/util/Calendar .html) и 'java.text.SimpleTextFormat' теперь [legacy] (https://en.wikipedia.org/wiki/Legacy_system), вытесненный [java.time] (https://docs.oracle. com/javase/8/docs/api/java/time/package-summary.html). См. [Учебное пособие по Oracle] (https://docs.oracle.com/javase/tutorial/datetime/TOC.html). –

9

Использование 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)); 
    } 
} 
+0

Могу ли я передать строку на сегодняшний день ?? – rasi

26
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd"); 
sdf.format(new Date()); 

Это должно сделать трюк

+0

У меня есть строка в формате 'dd/MM/yyyy', как я могу преобразовать – rasi

1

Или вы могли бы пойти по пути регулярных выражений:

String date = "10/07/2010"; 
String newDate = date.replaceAll("(\\d+)/(\\d+)/(\\d+)", "$3/$2/$1"); 
System.out.println(newDate); 

Он работает в обоих направлениях тоже. Конечно, это не подтвердит вашу дату, а также будет работать для строк типа «21432/32423/52352». Вы можете использовать "(\\d{2})/(\\d{2})/(\\d{4}", чтобы быть более точным в количестве цифр в каждой группе, но он будет работать только с dd/MM/yyyy до yyyy/MM/dd, а не наоборот (и по-прежнему принимает недопустимые числа там, как 45). И если вы дадите ему что-то недействительное, например «blabla», оно вернет то же самое обратно.

+3

Теперь у вас есть две проблемы. ;-) –

3
SimpleDateFormat newDateFormat = new SimpleDateFormat("dd/MM/yyyy"); 
Date myDate = newDateFormat.parse("28/12/2013"); 
newDateFormat.applyPattern("yyyy/MM/dd") 
String myDateString = newDateFormat.format(myDate); 

Теперь MyDate = 2013/12/28

7

Т.Л., д-р

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

2017/01/23

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

answer by Christopher Parker является правильным, но устаревшим. Нерешенные старые классы времени, такие как java.util.Date, java.util.Calendar и java.text.SimpleTextFormat, теперь legacy, вытесненные классами 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 и более поздних версий. Эти классы вытесняют неприятные старые legacy классы времени, такие как java.util.Date, Calendar, & SimpleDateFormat.

Проект Joda-Time, в настоящее время в maintenance mode, советует перейти на классы java.time.

Чтобы узнать больше, см. Oracle Tutorial. И поиск 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 и more.


Joda времени

UPDATE: Проект Joda-Time теперь в maintenance mode с командой советуя миграции в 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 
-1
SimpleDateFormat format1 = new SimpleDateFormat("yyyy/MM/dd"); 
System.out.println(format1.format(date)); 
1

много способов изменить формат даты

private final String dateTimeFormatPattern = "yyyy/MM/dd"; 
private final Date now = new Date(); 

final DateFormat format = new SimpleDateFormat(dateTimeFormatPattern); 
final String nowString = format.format(now); 

final Instant instant = now.toInstant(); 
final DateTimeFormatter formatter = 
     DateTimeFormatter.ofPattern( 
     dateTimeFormatPattern).withZone(ZoneId.systemDefault()); 
final String formattedInstance = formatter.format(instant); 

    /* Java 8 needed*/ 
    LocalDate date = LocalDate.now(); 
    String text = date.format(formatter); 
    LocalDate parsedDate = LocalDate.parse(text, formatter); 
0

Чтобы изменить формат даты, которую вы требуете, смотрите оба формата.

String stringdate1 = "28/04/2010"; 

try { 

    SimpleDateFormat format1 = new SimpleDateFormat("dd/MM/yyyy"); 
    Date date1 = format1.parse() 
    SimpleDateFormat format2 = new SimpleDateFormat("yyyy/MM/dd"); 

    String stringdate2 = format2.format(date1); 
    } catch (ParseException e) { 
    e.printStackTrace(); 
} 

здесь stringdate2 имеют формат даты yyyy/MM/dd. и он содержит 2010/04/28.

2

Это только Кристофер Паркер answer адаптировано для использования новых классов из Java 8:

final DateTimeFormatter OLD_FORMATTER = DateTimeFormatter.ofPattern("dd/MM/yyyy"); 
final DateTimeFormatter NEW_FORMATTER = DateTimeFormatter.ofPattern("yyyy/MM/dd"); 

String oldString = "26/07/2017"; 
LocalDate date = LocalDate.parse(oldString, OLD_FORMATTER); 
String newString = date.format(NEW_FORMATTER); 

1 ну, не то, что новые больше, Java 9 должен быть выпущен в ближайшее время.

Смежные вопросы