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

Как конвертировать "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"

4b9b3361

Ответ 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
    • Большая часть функций java.time возвращается на Java 6 и 7 в ThreeTen-Backport.
  • Android

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