日期格式不正确 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.Date
、java.util.Calendar
和 java.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的主要内容,如果未能解决你的问题,请参考以下文章