Как конвертировать "Mon Jun 18 00:00:00 IST 2012" до 18/06/2012?
У меня есть значение, подобное следующему Mon Jun 18 00:00:00 IST 2012
, и я хочу преобразовать его в 18/06/2012
Как это сделать?
Я пробовал этот метод
public String toDate(Date date) {
SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
Date theDate = null;
//String in = date + "/" + month + "/" + year;
try {
theDate = dateFormat.parse(date.toString());
System.out.println("Date parsed = " + dateFormat.format(theDate));
} catch (ParseException e) {
e.printStackTrace();
}
return dateFormat.format(theDate);
}
но он вызывает следующее исключение:
java.text.ParseException: Unparseable date: "Mon Jun 18 00:00:00 IST 2012"
Ответы
Ответ 1
Я надеюсь, что следующая программа решит вашу проблему.
String dateStr = "Mon Jun 18 00:00:00 IST 2012";
DateFormat formatter = new SimpleDateFormat("E MMM dd HH:mm:ss Z yyyy");
Date date = (Date)formatter.parse(dateStr);
System.out.println(date);
Calendar cal = Calendar.getInstance();
cal.setTime(date);
String formatedDate = cal.get(Calendar.DATE) + "/" + (cal.get(Calendar.MONTH) + 1) + "/" + cal.get(Calendar.YEAR);
System.out.println("formatedDate : " + formatedDate);
Ответ 2
Просто добавьте: новый SimpleDateFormat ( "bla bla bla", Locale.US)
public static void main(String[] args) throws ParseException {
java.util.Date fecha = new java.util.Date("Mon Dec 15 00:00:00 CST 2014");
DateFormat formatter = new SimpleDateFormat("EEE MMM dd HH:mm:ss Z yyyy", Locale.US);
Date date;
date = (Date)formatter.parse(fecha.toString());
System.out.println(date);
Calendar cal = Calendar.getInstance();
cal.setTime(date);
String formatedDate = cal.get(Calendar.DATE) + "/" +
(cal.get(Calendar.MONTH) + 1) +
"/" + cal.get(Calendar.YEAR);
System.out.println("formatedDate : " + formatedDate);
}
Ответ 3
Вы также можете использовать формулу в excel, чтобы преобразовать этот тип даты в тип даты, который может читать:
=DATEVALUE(CONCATENATE(MID(A1,8,3),MID(A1,4,4),RIGHT(A1,4)))
И вы получите: 12/7/2016
from: Wed Dec 07 00:00:00 UTC 2016
Ответ 4
java.time
Современный подход заключается в java.time классах. Они вытесняют трудные старые устаревшие классы времени, такие как Date
, Calendar
и SimpleDateFormat
.
Разберите как ZonedDateTime
.
String input = "Mon Jun 18 00:00:00 IST 2012";
DateTimeFormatter f = DateTimeFormatter.ofPattern( "E MMM dd HH:mm:ss z uuuu" )
.withLocale( Locale.US );
ZonedDateTime zdt = ZonedDateTime.parse( input , f );
Извлечь объект только для даты, LocalDate
, без какого-либо времени суток и без какого-либо часового пояса.
LocalDate ld = zdt.toLocalDate();
DateTimeFormatter fLocalDate = DateTimeFormatter.ofPattern( "dd/MM/uuuu" );
String output = ld.format( fLocalDate) ;
Дамп для консоли.
System.out.println( "input: " + input );
System.out.println( "zdt: " + zdt );
System.out.println( "ld: " + ld );
System.out.println( "output: " + output );
Вход: Пн Июн 18 00:00:00 IST 2012
zdt: 2012-06-18T00: 00 + 03: 00 [Азия/Иерусалим]
ld: 2012-06-18
вывод: 18/06/2012
Смотрите запуск кода в IdeOne.com.
Плохой выбор формата
Ваш формат является плохим выбором для обмена данными: трудно читать человеком, трудно разобрать с помощью компьютера, использует нестандартные 3-4-буквенные коды зон и предполагает английский.
Вместо этого используйте стандартные ISO 8601, где это возможно. Классы java.time используют ISO 8601 форматы по умолчанию при разборе/генерации значений даты и времени.
Укажите имя часового пояса в формате continent/region
, например America/Montreal
, Africa/Casablanca
или Pacific/Auckland
. Никогда не используйте аббревиатуру 3-4 символов, например EST
или IST
, поскольку они не являются настоящими часовыми поясами, а не стандартизированы и даже не уникальны (!). Например, ваше использование IST
может быть ирландским стандартным временем, стандартным временем в Израиле (как интерпретируется java.time, см. Выше), или стандартным временем Индии.
О java.time
Структура java.time встроена в Java 8 и более поздних версий. Эти классы вытесняют неприятный старый legacy классы даты-времени, такие как java.util.Date
, Calendar
и SimpleDateFormat
.
Проект Joda-Time, теперь режим обслуживания, советуем перейти на классы java.time.
Чтобы узнать больше, см. Учебник Oracle. И поиск Qaru для многих примеров и объяснений. Спецификация JSR 310.
Где получить классы java.time?
- Java SE 8 и SE 9 и позже
- Встроенный.
- Часть стандартного Java API с объединенной реализацией.
- Java 9 добавляет некоторые незначительные функции и исправления.
- Java SE 6 и SE 7
- Android
Проект ThreeTen-Extra расширяет java.time с помощью дополнительных классов. Этот проект является доказательством возможных будущих дополнений к java.time. Здесь вы можете найти полезные классы, такие как Interval
, YearWeek
, YearQuarter
и больше.