【问题标题】:date format is not correct java日期格式不正确 java
【发布时间】:2018-06-04 23:41:26
【问题描述】:

我正在尝试从 excel 文件中读取日期单元格,我正在使用 DataFormatter,但问题是我得到的格式不正确(日期和月份是倒置的),例如: 在 excel 文件中:15/03/2018 阅读后:03/15/2018

我需要修复此问题或将单元格转换为字符串格式,以便将其与另一个字符串进行比较。

提前致谢。

这就是我阅读单元格的方式:

DataFormatter formatter = new DataFormatter();
String current_date = formatter.formatCellValue(date_cell);

【问题讨论】:

  • 您在使用 POI 吗?如果是这样,请将其标记为apache-poi,以便我们知道

标签: java apache-poi dateformatter


【解决方案1】:

如顶部的javadocs 所示,Locale.US 和 Locale.UK 可能会混淆。

阅读后,您会得到美国惯例的月/日/年,而不是英国的一天/月/年。

DataFormatter formatter = new DataFormatter(Locale.UK);

【讨论】:

    【解决方案2】:

    试试这样的:

    String s = "03/15/2018";    
    Date d = new Date(s);   
    DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
    String t = df.format(d);
    System.out.println(t);
    

    (s 对应于您的 current_date 变量,并直接跟在您的其他代码之后)

    注意:您必须使用大写 Ms,因为在日期/时间格式中,'m' 代表分钟(所以我对以前的代码不好)

    NB^2:根据前面的讨论,代码“new Date(s)”肯定已被弃用,而且不好和错误。如果重要的话,可能会有一个更规范的答案,涉及基本上相同的事情,但使用日历。

    【讨论】:

    • 不客气 :D 其他评论者可能是对的,如果您通过 POI/DataFormatter API 进行了足够多的搜索,您可能会发现需要旋转以使其正确出现,但有时它是最简单的方法就是强行回答并继续你的生活;-) 另外,我在尝试帮助你时在我们的代码中发现了一个错误: new SimpleDateFormat("yyyy-mm-dd");总是错误的(几分钟/几个月的混乱)。呸呸呸。对不起,我带着极端的偏见打了一些虫子。
    • 谢谢。我完全同意你的看法,我只是要投降并使用拆分功能来反转日期和月份哈哈,只是为了不卡在那里!你是一个救生员(y)
    • 仅供参考,麻烦的旧日期时间类,如 java.util.Datejava.util.Calendarjava.text.SimpleDateFormat 现在是 legacy,被 Java 8 及更高版本中内置的 java.time 类所取代.见Tutorial by Oracle
    • 是的 Basil,这就是“弃用”的意思。
    【解决方案3】:

    您可以构建特定的日期格式化程序,例如

    SimpleDateFormat df = new SimpleDateFormat("yyyy-mm-dd");
    df.parse(
    

    (等)

    因此,如果它正确读取日期(我的意思是天被读取为天,月份被读取为月),那么制作特定于您想要的输出的日期格式化程序就很简单了。

    例如

    SimpleDateFormat df = new SimpleDateFormat("dd/mm/yyyy");
    

    然后是……呃……

    String current_date = df.format(date_cell);
    

    或者如果您需要单元格格式化程序来为您读取值,它会有点复杂。

    顺便说一句:

    请注意,由于 SimpleDateFormat 相对简单且易于使用,它可能已被弃用并被视为坏、邪恶和错误的 (tm)。

    (因为一旦你开始引入诸如时区、本地化和日历系统之间的差异之类的东西,事情就会很快变得复杂(因为现实世界很混乱),简单的答案只对快速而肮脏的“本地”有好处修复)

    【讨论】:

    • 这是关于 Excel,而不是 Java 日期格式。
    • 它被标记为“java”
    • 看代码。它是 DataFormatter,而不是 DateFormatter。它被标记为java,因为它是 Java 代码,使用 POI 库读取 Excel 文件。
    • 您可以获取从 DataFormatter 传递的值并将其泵入 DateFormatter,这通常是一种有用的技术。
    • 尝试从上面获取您的字符串,将其转换为 Date(或 DateTime (???))对象,然后将格式应用于该对象。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-31
    • 1970-01-01
    • 2018-04-20
    • 2012-10-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多