java - 在java中将ISO日期字符串转换为Jdatechooser日期

标签 java mongodb jdatechooser

我正在使用 java 和 MongoDB 来存储一些信息,包括使用 jdatechooser 的日期,并且我试图在数据库的另一个页面中设置日期。

当我查看 Db shell 时,我找到了这种格式的日期(2019-08-04T17:40:04.022Z)...我检索 DBObject 并设置 toString() 然后打印它以找到它(Sun Aug欧洲东部时间 2019 年 04 19:40:04)。

我测试了很多代码,甚至来自其他答案,但日期格式化程序的格式似乎都是错误的。

但是我总是收到此错误:

java.text.ParseException:无法解析的日期:“Sun Aug 04 19:40:04 EET 2019”

SimpleDateFormat sdf = new SimpleDateFormat("EE MM dd HH:mm:ss Z yyy");
Date date1 = sdf.parse(date);
System.out.println(date); //Prints Tue Oct 15 10:20:56 SGT 2015
jDateChooser1.setDate(date1);

我使用的格式示例

yyyy-MM-dd HH:mm:ss.SSS Z
EE MM dd HH:mm:ss Z yyy
yyyy-MM-dd
dd-MM-yyyy

您对解决这个问题有什么建议? 请随时要求编辑问题以帮助澄清问题

提前致谢

最佳答案

显然你正在使用一些你没有解释过的库,jdatechooser,来生成一个java.util.Date,它作为一个工具链存储在你的工具链中的某个地方。字符串 2019-08-04T17:40:04.022Z ,而在工具链的另一部分则由字符串 Sun Aug 04 19:40:04 EET 2019 表示。

让我们把这些碎片拆开。

在您命名库并最好链接到其产品网站之前,我们无法为您提供 jdatechooser 帮助。

java.util.Date 类很糟糕,现在是 legacy 。切勿使用它。这个类以及 SimpleDateFormatCalendar 多年前就被现代 java.time 类所取代,并采用了 JSR 310 .

具体来说,日期 已替换为 java.time.Instant 。如果您必须与尚未更新到 java.time 的旧代码进行互操作,请通过调用添加到旧类中的新转换方法来进行来回转换。

字符串 2019-08-04T17:40:04.022Z 符合标准 ISO 8601格式。 java.time 类在解析/生成字符串时默认使用标准格式。

Instant instant = Instant.parse( "2019-08-04T17:40:04.022Z" ) ;

正在生成。

String output = instant.toString() ;  // Yields: 2019-08-04T17:40:04.022Z

字符串 Sun Aug 04 19:40:04 EET 2019 的格式很糟糕。它假设英语,很难被机器解析,无法包含所有信息(缺少小数秒),并使用伪时区 EET 而不是真正的时区,例如 非洲/开罗。切勿使用此格式。不幸的是,这是 java.util.Date::toString 方法使用的格式。更糟糕的是,toString 方法动态应用 JVM 当前的默认时区来调整 UTC 中实际的值。 ,造成很多困惑。再次强调,出于这个原因和许多其他原因,切勿使用 Date 类。

您应该尽可能在代码中重点使用Instant。此类代表 UTC 中的一个时刻。

当使用JDBC时,你的driver可能不支持Instant。如果没有,请使用OffsetDateTime

OffsetDateTime odt = instant.atOffset( ZoneOffset.UTC ) ;
myPreparedStatement.setObject( … , odt ) ;

检索。

OffsetDateTime odt = myResultSet.getObject( … , OffsetDateTime.class ) ;

关于java - 在java中将ISO日期字符串转换为Jdatechooser日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57341260/

相关文章:

java - 为什么java lambda会跳转过滤器

java - MongoDB+Azure+Android : Error: com. mongodb.MongoException:不与master对话并且重试用完

node.js - 在单个响应中返回 Mongoose 错误列表

java - 在 Java 中将日期增加 18 年

java - Toedter 从 JDateChooser 获取日期

java - 如何一次删除不同的可更新记录?

java - 相当于Objective C中Java的DataOutputStream

java - 如何将 JDateChooser 的日期设置为 NULL 或 "0000-00-00"

java - 内存不足错误 : Java heap memory on Android Studio

java - 在 spring data mongodb 存储库的 @Query 注释中使用 $or 运算符