Привет, ребята, у меня проблема с изменением даты из одной формы в другую. Я просмотрел переполнение стека и сделал одно решение, но оно дает неправильный результат. Поскольку у меня есть дата в этом формате: 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 января, и я не знаю, почему... заранее спасибо
Вы можете посмотреть здесь: docs.oracle.com/javase/7/docs/api/java/text/…
о, хорошо, так что формат будет гггг-мм-дд чч:мм:сс .... Большое спасибо :)




Из документации 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.время, определенными в 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 8 и более поздние версии. Эти классы заменяют проблемные старые классы даты и времени наследие, такие как java.util.Date, Calendar и SimpleDateFormat.
Чтобы узнать больше, см. Учебник по оракулу. И поищите множество примеров и пояснений в Stack Overflow. Спецификация JSR 310.
Проект Джода-Время, теперь именуемый Режим технического обслуживания, рекомендует перейти на классы Java.время.
Вы можете обмениваться объектами Java.время напрямую с вашей базой данных. Используйте JDBC-драйвер, совместимый с JDBC 4.2 или более поздней версии. Нет необходимости в строках, нет необходимости в классах java.sql.*.
Где получить классы java.time?
mmозначает минуты. Вы хотитеMMв части даты; точно так же вы почти наверняка хотитеHHвместоhh.