Как преобразовать строку "2011-11-29 12:34:25" в дату в формате "dd-MM-yyyy" в JAVA - PullRequest
2 голосов
/ 29 ноября 2011

Я пытаюсь преобразовать дату в строковом формате и получить формат «гггг-мм-дд чч: мм: сс» в «дд-мм-гггг».

Я реализовал следующий код, но он дает: java.lang.IllegalArgumentException

        SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
        Date date = new Date(values);
        String mydate = dateFormat.format(date);

Ответы [ 6 ]

7 голосов
/ 29 ноября 2011

Сначала вы должны разобрать строковое представление вашей даты и времени в объект Date.

DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = (Date)formatter.parse("2011-11-29 12:34:25");

Затем вы форматируете объект Date обратно в строку в вашем предпочтительном формате.

DateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
String mydate = dateFormat.format(date);
2 голосов
/ 29 ноября 2011

Вам нужно разобрать дату, используя другую SimpleDateFormat

SimpleDateFormat dateFormat2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = dateFormat2.parse(values);
SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
String mydate = dateFormat.format(date);
1 голос
/ 11 мая 2017

tl; dr

LocalDateTime.parse( 
    "2011-11-29 12:34:25".replace( " " , "T " ) 
).format (
    DateTimeFormatter.ofPattern( "dd-MM-uuuu" )
)

29-11-2011

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

Современный подход использует java.timeклассы, а не проблемные унаследованные классы.

ISO 8601

Ваша строка ввода «2011-11-29 12:34:25» имеет формат, почти соответствующий формату стандарта ISO 8601.Чтобы полностью соответствовать, замените ПРОБЕЛ в середине на T.

String input = "2011-11-29 12:34:25".replace( " " , "T " );

Без указания часового пояса или смещения от UTC мы анализируем как LocalDateTime.

LocalDateTime ldt = LocalDateTime.parse( input ) ;

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

LocalDate ld = ldt.toLocalDate() ;

Чтобы создать строку в нужном формате, вы задаете пользовательскийшаблон форматирования.

DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd-MM-uuuu" );
String output = ld.format( f );

О java.time

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

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

Чтобы узнать больше, см. Oracle Tutorial .И поиск переполнения стека для многих примеров и объяснений.Спецификация: JSR 310 .

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

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

0 голосов
/ 29 ноября 2011

попробуйте так

String mydate = "2011-11-29 12:34:25"
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Date date = null;

try{
   date = sdf.parse(mydate);
   SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
   String mydate = dateFormat.format(date);
}catch(Exception ex){
   // handle exception
}
0 голосов
/ 29 ноября 2011

Конструктор для Date занимает много времени, представляющего время в миллисекундах.Вам нужно использовать другой экземпляр SimpleDateFormat, чтобы сначала проанализировать вашу входную строку в метку времени.

0 голосов
/ 29 ноября 2011

IllegalArgumentException, вероятно, возникает, когда программа пытается построить Date объект

Какое значение?

Следующий фрагмент кода работает правильно.

SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
Date date = new Date();
String mydate = dateFormat.format(date);

System.out.println(mydate);

Выход:

29/11/2011

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...