使用Spire.xls将Excel另存为csv时,日期类型被转成了月/日/年格式

spire.xls版本: 13.10.0

1
2
3
4
5
6
7
8
9
10
11
12
public static void convertExcelToCsvSpire(String sourceFile, String csvFilePath){
//创建Workbook类的对象
com.spire.xls.Workbook workbook = new com.spire.xls.Workbook();
//加载Excel
workbook.loadFromFile(sourceFile);
//计算公式(如果存在)
workbook.calculateAllValue();
//获取第一张工作表sheet
Worksheet sheet = workbook.getWorksheets().get(0);
//保存为CSV
sheet.saveToFile(csvFilePath, ",", Charset.forName("UTF-8"));
}

以上代码在mac中调试的时候,Excel中日期内容为 2023/1/2 12:00:00,另存为csv后日期可以正确转换成2023/1/2 12:00:00,但发布服务器后发现csv保存的日期字段字段为1/2/2023 12:00:00

原因是Spire.xls在保存时会检查当前机器的语言,服务器的默认语言一般是英文,所以 csv 的日期格式被默认转成了英文的日月年格式,将mac的语言调整成语后成功复现。
解决方法就是修改服务的默认语言为中文,加一行Locale.setDefault(Locale.CHINA);

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public static void convertExcelToCsvSpire(String sourceFile, String csvFilePath){
// 服务器一般为英语,保存CSV的时候会将日期类型转换为 月日年
// 设置为中国则默认为 年月日
Locale.setDefault(Locale.CHINA);
//创建Workbook类的对象
com.spire.xls.Workbook workbook = new com.spire.xls.Workbook();
//加载Excel
workbook.loadFromFile(sourceFile);
//计算公式(如果存在)
workbook.calculateAllValue();
//获取第一张工作表sheet
Worksheet sheet = workbook.getWorksheets().get(0);
//保存为CSV
sheet.saveToFile(csvFilePath, ",", Charset.forName("UTF-8"));
}

资料
xls 转换 pdf时,日期格式的问题。