【问题标题】:Change date format of excel date data while saving into database with Java使用Java保存到数据库时更改excel日期数据的日期格式
【发布时间】:2026-01-18 18:05:03
【问题描述】:

我编写了代码以将我的用户数据以 Excel 文件的形式保存到 MySQL 数据库中。当我运行它时,一切正常,除了日期错误。在 excel 文件中,日期格式为 dd.MM.yyyy,而 MySQL 中的日期格式为 yyyy-MM-dd。我应该在我的代码中做什么来转换日期格式,同时将它保存到数据库中?

这些是代码:

import java.io.FileInputStream;
import java.sql.*;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Vector;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class ExcelToDb {
    public static void main( String [] args ) {
        String fileName="testing.xlsx";
        Vector dataHolder=read(fileName);
        saveToDatabase(dataHolder);
    }
    public static Vector read(String fileName)    {
        Vector cellVectorHolder = new Vector();
        try{
            FileInputStream myInput = new FileInputStream(fileName);
            //POIFSFileSystem myFileSystem = new POIFSFileSystem(myInput);
            XSSFWorkbook myWorkBook = new XSSFWorkbook(myInput);
            XSSFSheet mySheet = myWorkBook.getSheetAt(0);
            Iterator rowIter = mySheet.rowIterator();
            while(rowIter.hasNext()){
                XSSFRow myRow = (XSSFRow) rowIter.next();
                Iterator cellIter = myRow.cellIterator();
                //Vector cellStoreVector=new Vector();
                List list = new ArrayList();
                while(cellIter.hasNext()){
                    XSSFCell myCell = (XSSFCell) cellIter.next();
                    list.add(myCell);
                }
                cellVectorHolder.addElement(list);
            }
        }catch (Exception e){e.printStackTrace(); }
        return cellVectorHolder;
    }
    private static void saveToDatabase(Vector dataHolder) {
        String activityId="";
        String activityName="";
        String activityAllocation="";
        String activityDate="";
        String activityPersonInCharge="";
        System.out.println(dataHolder);

        for(Iterator iterator = dataHolder.iterator();iterator.hasNext();) {
            List list = (List) iterator.next();
            activityId= list.get(0).toString();
            activityName= list.get(5).toString();
            activityAllocation= list.get(8).toString();
            activityDate= list.get(10).toString();
            activityPersonInCharge= list.get(11).toString();


            try {
                Class.forName("com.mysql.jdbc.Driver").newInstance();
                Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/TEST", "root", "password");
                System.out.println("connection made...");
                PreparedStatement stmt=con.prepareStatement("INSERT INTO TEST_DEMO(ACT_ID,ACT_NAME,ACT_ALLOCATION,ACT_DATE,ACT_PERSON_ON_CHARGE) VALUES(?,?,?,?,?)");
                stmt.setString(1, activityId);
                stmt.setString(2, activityName);
                stmt.setString(3, activityAllocation);
                stmt.setString(4, activityDate);
                stmt.setString(5, activityPersonInCharge);
                stmt.executeUpdate();

                System.out.println("Data is inserted");
                stmt.close();
                con.close();
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            } catch (SQLException e) {
                e.printStackTrace();
            } catch (InstantiationException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        }



        }
    }

请为日期格式化部分提供一些线索。

提前致谢。

【问题讨论】:

  • Date 的字符串在哪里?将它们保留为日期
  • 我可以举个例子吗?好的。如果我从字符串更改为日期,等号(=)之后应该是什么?抱歉,这还是个新手。

标签: java mysql excel date


【解决方案1】:
You just try this:
SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
Date dt = sdf.parse("your date field");
sdf.applyPattern("yyyy-MM-dd");
res = sdf.format(dt);

【讨论】:

  • 只有代码的答案质量不高。请编辑您的答案以解释您的代码,说明解决问题的原因和方式,并链接到任何相关文档。
  • @Manchikanti,不工作,它在线程“main”java.text.ParseException 中给了我异常:无法解析的日期:“dd.MM.yyyy”
【解决方案2】:

不要向信使开枪。 :-)

据我所知,MS Excel 中的日期可以采用不同的格式,您无法通过 Apache POI 确定使用了哪种格式。如果有人能告诉我我在这里错了,我会很高兴。

为了在 MySQL 中存储日期,您需要将其存储在数据类型为 date 的列中。这样的列没有格式。仅当您将列中的日期呈现给用户(或将其序列化为 JSON 或出于其他原因需要字符串表示)时,您才需要格式化列中的日期。

【讨论】: