«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Почему SimpleDateFormat.parse выводит результат, отличный от указанного при преобразовании меток времени UNIX в даты?

Почему SimpleDateFormat.parse выводит результат, отличный от указанного при преобразовании меток времени UNIX в даты?

Опубликовано 9 ноября 2024 г.
Просматривать:730

Why does SimpleDateFormat.parse output differently than specified when converting UNIX timestamps to dates?

SimpleDateFormatter.parse выводит данные, отличные от указанных

При преобразовании временных меток UNIX в даты с помощью SimpleDateFormat вы можете столкнуться с несоответствиями между указанным форматом и вывод.

В данном примере цель состоит в том, чтобы преобразовать метку времени UNIX («a1527069600») в дату в формате «дд/ММ/гггг чч:мм:сс a». Однако использование SimpleDateFormatter.format, за которым следует SimpleDateFormatter.parse, дает другой результат.

Причина несоответствия

Несоответствие возникает потому, что SimpleDateFormatter.parse ожидает строку в точном формат, указанный во время создания экземпляра («дд/ММ/гггг чч:мм:сс а»). В этом случае SimpleDateFormatter.format выводит дату в формате, отличном от ожидаемого формата ввода, что приводит к сбою операции синтаксического анализа.

Решение

Чтобы избежать этой проблемы , рекомендуется не передавать строки даты в базы данных MySQL. Вместо этого используйте объекты даты. Современный API даты и времени Java, java.time, предоставляет такие классы, как LocalDateTime, которые упрощают обработку дат.

Пример:

String ep = "a1527069600";
long epoch = Long.parseLong(ep.substring(1));
Instant inst = Instant.ofEpochSecond(epoch);
LocalDateTime ldt = inst.atZone(ZoneId.of("Asia/Calcutta")).toLocalDateTime();

System.out.println(ldt.toString()); // Output: 2018-05-23T15:30

PreparedStatement ps = myDatabaseConnection.prepareStatement(
        "insert into my_table (my_date_time) values (?)");
ps.setObject(1, ldt);

Этот код преобразует временную метку UNIX в LocalDateTime, которую можно напрямую вставить в базу данных MySQL.

Вывод:

Используя java.time и передавая объекты даты вместо строк в MySQL, вы можете устранить проблемы с форматированием и обеспечить точность преобразования даты.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3