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

时间:2019-03-20 16:31:10

标签: 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"))) {
        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();
        });
    }
}

此处,该员工的入职日期为2019/03/20格式,即yyyy / MM / dd格式。而且我也应该以相同的格式将其写入CSV。 但是当我检查CSV时,它的格式为03/20/2019,即MM / dd / yyyy格式。 知道我哪里出问题了吗?

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

1 个答案:

答案 0 :(得分:0)

Locale

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

java.time

同样,您的代码也使用了几年前被Jem 310取代的 java.time 类的具有缺陷的日期时间类。

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

ISO 8601

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