Преобразование даты в строку Java

import java.util.Date;
import java.text.SimpleDateFormat;
import java.util.TimeZone;
import java.text.DateFormat;

public class MyClass {
    public static void main(String args[]) {
      Date scadenza = new Date();
      String date = MyClass.dateToString(scadenza, "YYYYMMDD");
      
      System.out.println(date);
    }
    
    public static String dateToString(Date date, String format){
        if (date == null) return null;
        final DateFormat df = new SimpleDateFormat(format);
        df.setTimeZone(TimeZone.getTimeZone("UTC"));
        return df.format(date);
    }
}

У меня есть этот фрагмент кода в одном из моих программ, я упростил его, переписав его в примере класса Java. Сегодня "2022-04-08", и когда я выполняю этот код, переменная date равна "20220498", но она должна быть "20220408". Как можно решить эту проблему?

Я рекомендую вам не использовать SimpleDateFormat и Date. Эти классы плохо спроектированы и давно устарели, а первые, как известно, доставляют много хлопот. Вместо этого используйте LocalDate и DateTimeFormatter, оба из java.time, современный API даты и времени Java.

Ole V.V. 08.04.2022 17:43
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
48
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Попробуйте использовать "yyyyMMdd" в качестве параметра формата. D - день в году согласно документации. Y - год недели. https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html

Пс. Мы видим, что вы итальянцы, продолжайте использовать Stackoverflow!

Вы получаете текущую дату в часовом поясе UTC, который может отличаться от вашей местной даты.

Кстати, Date в Java также содержит время. То, что вы, вероятно, ищете, это:

System.out.println(DateTimeFormatter.ofPattern("yyyyMMdd").format(LocalDate.now()));

Использование LocalDate из java.time — очень хорошее предложение, в том числе потому, что Date плохо спроектирован и давно устарел. Спасибо за демонстрацию использования java.time. Формат встроенный, поэтому вместо него можно использовать DateTimeFormatter.BASIC_ISO_DATE. Если кто-то хочет сегодняшнюю дату в UTC, нужно использовать LocalDate.now(ZoneOffset.UTC)) (очень естественно, не так ли?). Сегодня я попробовал ваш код и получил ожидаемое 20220408.

Ole V.V. 08.04.2022 18:58

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