Если вы заменяете значение индекса, указанное в переменной 'n', попробуйте следующее:
def missing_char(str, n):
str=str.replace(str[n],":")
return str
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
для языковой нейтральной локали (это говорит по-английски). 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
(день месяца). Все эти буквы находятся в документации .