Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中将ISO日期字符串转换为Jdatechooser日期_Java_Mongodb_Jdatechooser - Fatal编程技术网

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

在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

我正在使用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”

我使用的格式示例

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在Java
Sun 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 ) ;