在java中将ISO日期字符串转换为Jdatechooser日期
我正在使用java和MongoDB来存储一些信息,包括使用jdatechooser的日期,我正在尝试在数据库的另一个页面中设置日期 当我查看Db shell时,我发现日期是这种格式的(2019-08-04T17:40:04.022Z)。。。我检索DBObject并设置为String(),然后打印它以找到它(Sun Aug 04 19:40:04 EET 2019) 我测试了这么多的代码,甚至来自其他答案,但对于日期格式化程序来说,似乎都是错误的格式 但是,我总是会遇到以下错误: java.text.ParseException:不可解析日期:“Sun Aug 04 19:40:04 EET 2019” 我使用的格式示例在java中将ISO日期字符串转换为Jdatechooser日期,java,mongodb,jdatechooser,Java,Mongodb,Jdatechooser,我正在使用java和MongoDB来存储一些信息,包括使用jdatechooser的日期,我正在尝试在数据库的另一个页面中设置日期 当我查看Db shell时,我发现日期是这种格式的(2019-08-04T17:40:04.022Z)。。。我检索DBObject并设置为String(),然后打印它以找到它(Sun Aug 04 19:40:04 EET 2019) 我测试了这么多的代码,甚至来自其他答案,但对于日期格式化程序来说,似乎都是错误的格式 但是,我总是会遇到以下错误: java.tex
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
类很糟糕,现在很糟糕。永远不要使用它。这个类,连同SimpleDateFormat
&Calendar
,在几年前被现代java.time类取代,并采用了
具体而言,日期
被替换为。如果您必须与尚未更新为java.time的旧代码进行互操作,请通过调用添加到旧类中的新转换方法来来回转换
字符串2019-08-04T17:40:04.022Z
为标准格式。在解析/生成字符串时,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
,而不是真正的时区,如Africa/Cairo
。永远不要使用这种格式。不幸的是,这是java.util.Date::toString
方法使用的格式。更糟糕的是,这个toString
方法动态地应用JVM的当前默认时区来调整实际使用的值,造成了很多混乱。同样,千万不要因为这个和其他原因而使用Date
类
您应该尽可能在代码中使用Instant
。此类代表UTC中的一个时刻
使用时,可能不支持即时
。如果没有,请使用
检索
OffsetDateTime odt = myResultSet.getObject( … , OffsetDateTime.class ) ;
我建议您不要使用SimpleDateFormat
和Date
。这些类设计得很糟糕,而且早已过时,其中前者尤其令人讨厌。改为使用DateTimeFormatter
和Instant
或OffsetDateTime
,所有这些都来自。您的预期结果是什么?在第一个示例中,我假设您希望将日期选择器设置为8月4日,但是如果DB shell在JavaSun Aug 07 01:40:04 EET 2019
中显示2019-08-06T23:40:04.022Z
和.toString()
?另外,您在MongoDB中的数据类型是什么?如果它解决了你的问题,你能改变它吗?我不明白你为什么认为你需要解析日期。我也不知道你的代码如何抛出异常并打印2015年10月15日星期二10:20:56 SGT
。当我试着做一个简单的格式(“dd-MM-yyyy”)时,比如说(“22-03-2019”),然后设置它实际工作的日期。好的,看,这是我的代码JDateChoser
的链接在这个问题上给出了(如此承认,只需点击一次以上)。
OffsetDateTime odt = instant.atOffset( ZoneOffset.UTC ) ;
myPreparedStatement.setObject( … , odt ) ;
OffsetDateTime odt = myResultSet.getObject( … , OffsetDateTime.class ) ;