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"
. Как можно решить эту проблему?
Попробуйте использовать "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
.
Я рекомендую вам не использовать
SimpleDateFormat
иDate
. Эти классы плохо спроектированы и давно устарели, а первые, как известно, доставляют много хлопот. Вместо этого используйтеLocalDate
иDateTimeFormatter
, оба из java.time, современный API даты и времени Java.