通过Java写入CSV时的日期格式不正确

通过Java写入CSV时的日期格式不正确,java,csv,bufferedwriter,Java,Csv,Bufferedwriter,所以,我有一个方法,可以将一些对象列表写入CSV private void writeToCSV(List<Employee> empList) { try(BufferedWriter writer = new BufferedWriter(new OutputStreamWriter( new FileOutputStream(System.getProperty("java.io.tmpdir")+"Test.csv"), "UTF-8"

所以,我有一个方法,可以将一些对象列表写入CSV

private void writeToCSV(List<Employee> empList) {
    try(BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(
                new FileOutputStream(System.getProperty("java.io.tmpdir")+"Test.csv"), "UTF-8"))) {
        empList.forEach(eachEmployee -> {
            StringBuilder builder = new StringBuilder();
            builder.append(eachEmployee.getName());
            builder.append(CSV_SEPARATOR);
            builder.append(eachEmployee.getID());
            builder.append(CSV_SEPARATOR);
            builder.append(eachEmployee.getJoiningDate());
            writer.write(builder.toString());
            writer.newLine();
        });
    }
}
private void writeToCSV(列表雇主列表){
try(BufferedWriter=new BufferedWriter(new OutputStreamWriter(
新的FileOutputStream(System.getProperty(“java.io.tmpdir”)+“Test.csv”),“UTF-8”)){
雇员。forEach(每个雇员->{
StringBuilder=新的StringBuilder();
append(eachEmployee.getName());
附加(CSV_分隔符);
append(eachEmployee.getID());
附加(CSV_分隔符);
append(eachEmployee.getJoiningDate());
writer.write(builder.toString());
writer.newLine();
});
}
}
在此,员工的加入日期采用2019/03/20格式,即yyyy/MM/dd格式。我也应该用同样的格式将其写入CSV。 但当我检查CSV时,它是2019年3月20日,即MM/dd/yyyy格式。 你知道我哪里出了问题吗

编辑:加入日期是一种字符串类型

Locale
JVM当前默认的
Locale
很可能在生成表示日期值的文本时被隐式应用。我只能猜测,因为您忽略了解释被调用方法的作用以及其返回值的数据类型

java.time 您的代码也可能使用了有缺陷的日期时间类,这些类在几年前被采用JSR 310的java.time类取代

最终的解决方案是在代码中采用java.time类

ISO 8601
并学习在将日期时间值序列化为文本时使用标准ISO 8601格式。适用于YYYY-MM-DD格式的日期。在生成/解析字符串时,java.time类默认使用ISO 8601格式

什么类型的加入日期?字符串或日期对象?更新了问题。这是一种字符串类型。您需要将字符串解析为日期对象,然后再返回到字符串。您是如何检查CSV的?碰巧你用Excel打开了它?在这种情况下,Excel可能已将其转换。试着用一个简单的文本编辑器打开文件。@RobertKock是的,我确实在excel中打开了它。我能做些什么来对抗Excel的这种行为吗?