почему поле даты путается, когда я читаю с xlsx на java?

#java #excel #oop #logic #structure

Вопрос:

У меня есть формат столбца даты, установленный как M/d/гггг в excel, однако, когда я читаю значение ячейки в Java, дата выглядит как «05/января/2021», я не понимаю, что происходит? может ли кто-нибудь помочь мне с тем, что я делаю неправильно?

 XSSFWorkbook wb1 = new XSSFWorkbook(fis1);  XSSFSheet sheet1 = wb1.getSheetAt(0); //creating a Sheet object to retrieve object  Iteratorlt;Rowgt; itr1 = sheet1.iterator(); //iterating over excel file  ArrayList recipientids = new ArrayList();  for (Row row : sheet1) { // For each Row.  Cell cell = row.getCell(4); // Get the Cell at the Index / Column you want.  Cell cell2 = row.getCell(5);  CellType type = cell2.getCellType();  if (type == CellType.NUMERIC) {  Date date = new Date();  SimpleDateFormat DateFor = new SimpleDateFormat("M/d/yyyy");  String dateString = cell2.toString();  String newdate = dateString.replace("-", "/");   arraylist.add(cell "-" newdate);  } }  

Однако, когда я пытаюсь отформатировать, я не могу отформатировать/проанализировать исключения.

Комментарии:

1. Больше не используйте SimpleDateFormat . Он устарел уже столько лет назад …

2. не могли бы вы, пожалуйста, предложить мне обходной путь?

Ответ №1:

Как уже предлагалось, не используйте SimpleDateFormat или даже Date . С Java 8 в Java появился новый API даты и времени.

Проверьте следующее, это может помочь:

 XSSFWorkbook wb1 = new XSSFWorkbook(fis1);  XSSFSheet sheet1 = wb1.getSheetAt(0); //creating a Sheet object to retrieve object  Iteratorlt;Rowgt; itr1 = sheet1.iterator(); //iterating over excel file  ArrayList recipientids = new ArrayList(); DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("M/d/yyyy");  for (Row row : sheet1) { // For each Row.  Cell cell = row.getCell(4); // Get the Cell at the Index / Column you want.  Cell cell2 = row.getCell(5);  CellType type = cell2.getCellType();  if (type == CellType.NUMERIC) {  String dateString = cell2.toString();  LocalDate date = LocalDate.parse(dateString, dateTimeFormatter);  System.out.println(date.format(dateTimeFormatter)); // Formats this date using the specified formatter.  } }  

Комментарии:

1. @NewBond007, это помогло? Дайте мне знать, если что-то будет неясно.