У меня проблема с изменением формата даты

Привет, ребята, у меня проблема с изменением даты из одной формы в другую. Я просмотрел переполнение стека и сделал одно решение, но оно дает неправильный результат. Поскольку у меня есть дата в этом формате: 2019-04-16 05:50:44 и я хочу преобразовать его в этот формат 4 апр Я сделал этот код для преобразования

SimpleDateFormat spf=new SimpleDateFormat("yyyy-mm-dd hh:mm:ss");
  Date newDate=spf.parse("2019-04-16 05:50:44");
  spf= new SimpleDateFormat("MMM dd");
String date = spf.format(newDate);

И результат, который я получаю, - 16 января, и я не знаю, почему... заранее спасибо

mm означает минуты. Вы хотите MM в части даты; точно так же вы почти наверняка хотите HH вместо hh.
Jon Skeet 16.04.2019 09:08

Вы можете посмотреть здесь: docs.oracle.com/javase/7/docs/api/java/text/…

Jeel Vankhede 16.04.2019 09:10

о, хорошо, так что формат будет гггг-мм-дд чч:мм:сс .... Большое спасибо :)

Usman Malik 16.04.2019 09:14
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
3
68
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Из документации SimpleDateFormat: https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html

M Month in year

m Minute in hour

Итак, ваш код должен быть:

SimpleDateFormat spf=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Date newDate=spf.parse("2019-04-16 05:50:44");
spf= new SimpleDateFormat("MMM dd");
String date = spf.format(newDate);

тл;др

LocalDateTime                                            // Represent a date and time-of-day but without a time zone or offset-from-UTC. 
.parse(
    "2019-04-16 05:50:44".replace( " " , "T" )           // Comply with ISO 8601 standard format by replacing the SPACE in the middle with a `T`. 
)                                                        // Returns an immutable `LocalDateTime` object. 
.format(                                                 // Generate a `String` containing text representing the value of this date-time object. 
    DateTimeFormatter.ofPattern( "MMM dd" , Locale.US )  // The Locale determines the human language and cultural norms used in localizing the words and formatting generated to the resulting text. 
)                                                        // Returns a `String`. 

Apr 16

Java.время

Вы используете ужасные классы даты и времени, которые несколько лет назад были вытеснены классами Java.время, определенными в JSR 310.

Преобразование входных данных в соответствии со стандартом ИСО 8601.

String input = "2019-04-16 05:50:44".replace( " " , "T" ) ;

Анализируйте как LocalDateTime, так как во входных данных отсутствует указание часового пояса или смещения от UTC.

LocalDateTime ldt = LocalDateTime.parse( input ) ;

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

MonthDay md = MonthDay.from( ldt ) ;

Сгенерируйте строку в локализованном формате.

Locale locale = Locale.CANADA_FRENCH; // Or Locale.US etc.
DateTimeFormatter f = DateTimeFormatter.ofPattern( "MMM dd" , locale );
String output = md.format( f );

Дамп на консоль.

System.out.println( "md.toString(): " + md );
System.out.println( "output: " + output );

md.toString(): --04-16

output: avr. 16


О Java.время

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

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

Проект Джода-Время, теперь именуемый Режим технического обслуживания, рекомендует перейти на классы Java.время.

Вы можете обмениваться объектами Java.время напрямую с вашей базой данных. Используйте JDBC-драйвер, совместимый с JDBC 4.2 или более поздней версии. Нет необходимости в строках, нет необходимости в классах java.sql.*.

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

  • Ява SE 8, Ява SE 9, Ява SE 10, Ява SE 11 и более поздние версии — часть стандартного Java API со встроенной реализацией.
    • Java 9 добавляет некоторые незначительные функции и исправления.
  • Ява SE 6 и Ява SE 7
    • Большая часть функций Java.время обратно перенесена на Java 6 и 7 в ThreeTen-Backport.
  • Андроид
    • Более поздние версии реализации пакетов Android классов Java.время.
    • Для более ранних версий Android (<26) проект тридесятьABP адаптирует ThreeTen-Backport (упомянутый выше). См. Как использовать ThreeTenABP….

Другие вопросы по теме