Дата окончания года (дата java jautil), преобразованная в строку как неправильная дата [дубликат]

Если вы заменяете значение индекса, указанное в переменной 'n', попробуйте следующее:

def missing_char(str, n):
 str=str.replace(str[n],":")
 return str
0
задан jarlh 12 May 2017 в 09:03
поделиться

1 ответ

    LocalDate date4 = ZonedDateTime
            .parse(date, DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss zzz yyyy", Locale.ENGLISH))
            .toLocalDate();
    java.sql.Date date5 = java.sql.Date.valueOf(date4);

Я использую современные классы в пакете java.time. Вы заметили, что код не только проще, как только вы знакомы с текстом нового стиля, но и понятным.

Если вы хотите быть на 100% современным, вы также должны проверить будет ли ваш последний MySQL JDBC-драйвер не принимать LocalDate напрямую без преобразования в java.sql.Date. Это необходимо.

Несколько примечаний к примечанию

  • Если вам нужно, чтобы ваш код запускался на компьютерах вне вашего контроля, всегда дайте языковой стандарт вашему форматированию, или ваша строка даты не может анализируется на компьютере с неанглоязычным языком. Вы можете использовать Locale.ROOT для языковой нейтральной локали (это говорит по-английски).
  • Если вы можете, избегайте аббревиатур из трех букв часового пояса. Многие неоднозначны. EET - это всего лишь половина часового пояса, так как некоторые места, где он используется, теперь находятся на EEST (летнее время). Лучше использовать либо длинный идентификатор зоны времени, например Europe/Bucharest, либо смещение от UTC, как +02:00.

Эти точки действительны независимо от того, используете ли вы DateTimeFormatter или SimpleDateFormat .

Если вы не можете или не хотите переходить к рекомендуемым новым классам, исправление для вашего кода:

    SimpleDateFormat formatnow 
            = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", Locale.ENGLISH); 
    SimpleDateFormat formatneeded = new SimpleDateFormat("yyyy-MM-dd");

Я использую строчные буквы zzz, так как это документируется в соответствии с трехбуквенным именем часового пояса, я знаю, что работает верхний регистр ZZZ. Я добавил локаль. И, возможно, самое главное, в нужном формате я изменил YYYY (недельный год) на yyyy (календарный год) и DD (день года) на dd (день месяца). Все эти буквы находятся в документации .

1
ответ дан Ole V.V. 19 August 2018 в 05:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: