日期格式不正确 java

Posted

技术标签:

【中文标题】日期格式不正确 java【英文标题】:date format is not correct 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,以便我们知道 【参考方案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 (???))对象,然后将格式应用于该对象。

以上是关于日期格式不正确 java的主要内容,如果未能解决你的问题,请参考以下文章

Java日期处理格式不正确

java 日期格式判断问题

java8位字符串转日期格式后不正确

Java如何检查日期格式是否正确?

使用Java如何验证所以日期是不是正确

日期时间格式无效:1292 日期时间值不正确 [重复]