Неверный формат даты
Я пытаюсь прочитать ячейку даты из файла 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 относительно прост и прост в использовании, он, вероятно, не рекомендуется и считается плохим, злым и неправильным (тм).
(По той причине, что как только вы начинаете вводить такие вещи, как часовые пояса, локализация и различия между календарными системами, вещи очень быстро усложняются (потому что реальный мир запутан), а простые ответы хороши только для быстрого и грязного "локального" исправления)