Неверный формат даты

Я пытаюсь прочитать ячейку даты из файла Excel, я использую DataFormatter, но проблема в том, что формат, который я получаю, неправильный (день и месяц инвертированы), пример: в файле Excel: 15/03/2018 После прочтения: 15.03.2008

Мне нужно исправить это или преобразовать ячейку в формат строки, чтобы сравнить ее с другой строкой.

заранее спасибо.

Вот как я читаю клетку:

DataFormatter formatter = new DataFormatter();
String current_date = formatter.formatCellValue(date_cell);

3 ответа

Решение

Попробуйте что-то вроде этого:

String s = "03/15/2018";    
Date d = new Date(s);   
DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
String t = df.format(d);
System.out.println(t);

(s соответствует вашей переменной current_date и следует сразу после вашего другого кода)

NB: вы должны использовать заглавные буквы M, потому что в форматах даты / времени "m" обозначают минуты (так что мой плохой код предыдущего кода)

NB ^ 2: код "новые даты" определенно устарел, плох и неправильн в соответствии с предыдущим обсуждением. Если это имеет значение, возможно, есть более канонический ответ, включающий, по сути, то же самое, но с Календари.

Как видно из javadocs вверху, Locale.US и Locale.UK могут быть перепутаны.

После прочтения вы получаете соглашение США Месяц / День / Год вместо одного дня / месяца / года в Великобритании.

DataFormatter formatter = new DataFormatter(Locale.UK);

Вы можете создать определенный форматер даты, например

SimpleDateFormat df = new SimpleDateFormat("yyyy-mm-dd");
df.parse(

(так далее)

Поэтому, если он правильно читает дату (под которой я подразумеваю, что дни читаются как дни, а месяцы читаются как месяцы), тогда достаточно просто сделать средство форматирования даты конкретным для вывода, который вы хотите.

например

SimpleDateFormat df = new SimpleDateFormat("dd/mm/yyyy");

а потом что-то вроде... э-э...

String current_date = df.format(date_cell);

или если вам понадобится средство форматирования ячейки, чтобы прочитать значение для вас, это будет немного сложнее.

Как в сторону:

Обратите внимание, что поскольку SimpleDateFormat относительно прост и прост в использовании, он, вероятно, не рекомендуется и считается плохим, злым и неправильным (тм).

(По той причине, что как только вы начинаете вводить такие вещи, как часовые пояса, локализация и различия между календарными системами, вещи очень быстро усложняются (потому что реальный мир запутан), а простые ответы хороши только для быстрого и грязного "локального" исправления)

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