Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.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.text.ParseException:不可解析的日期:";2018-05-23T06:39:37;0000“;_Java_Android_Date_Simpledateformat_Formatexception - Fatal编程技术网

java.text.ParseException:不可解析的日期:";2018-05-23T06:39:37;0000“;

java.text.ParseException:不可解析的日期:";2018-05-23T06:39:37;0000“;,java,android,date,simpledateformat,formatexception,Java,Android,Date,Simpledateformat,Formatexception,我正在尝试从服务器接收的字符串创建日期。字符串是: 2018-05-23T06:39:37+0000 因此,正确的格式应为: yyyy-MM-dd'HH:MM:ss.SSSZ 这是我的密码: String createdDate = comment.getCreatedDateTime(); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ", Locale.US); try

我正在尝试从服务器接收的
字符串创建
日期
字符串是:

2018-05-23T06:39:37+0000

因此,正确的格式应为:

yyyy-MM-dd'HH:MM:ss.SSSZ

这是我的密码:

String createdDate = comment.getCreatedDateTime();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ", Locale.US);
try {
    Date parsedDate = simpleDateFormat.parse(createdDate);
    createdDate = parsedDate.toString();
} catch (ParseException ex) {
    ex.printStackTrace();
}
mCommentDate.setText(createdDate);
我不知道是否有任何方法可以做到这一点,因为在此之后,我想再次解析为下一种格式:

年月日hh:MM

我试图直接使用最后一种格式解析原始的
字符串
,但得到了相同的异常


有什么建议吗?

给定的输入日期
String
格式

2018-05-23T06:39:37+0000

不正确,因此您将获得
ParseException
,因为日期格式yyyy-MM-dd'T'HH:MM:ss中缺少毫秒(SSS)部分

因此,请尝试使用

2018-05-23T06:39:37.235-0530

所以下面的代码应该可以工作

String createdDate = comment.getCreatedDateTime();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ", Locale.US);
    try {
        Date parsedDate = simpleDateFormat.parse(createdDate);
        createdDate = parsedDate.toString();
        System.out.println(parsedDate.toString());
    } catch (ParseException ex) {
        ex.printStackTrace();
    }
mCommentDate.setText(createdDate);
好的,第一个错误(正如您所指出的)是我在原始
字符串上没有毫秒

SimpleDataFormat
中删除“SSS”后,它就像一个符咒一样工作。这是最后的代码:

String createdDate = comment.getCreatedDateTime();
SimpleDateFormat defaultDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ", Locale.getDefault());
try {
    Date parsedDate = defaultDateFormat.parse(createdDate);
    SimpleDateFormat finalDateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm", Locale.getDefault());
    createdDate = finalDateFormat.format(parsedDate);
} catch (ParseException ex) {
    ex.printStackTrace();
}
mCommentDate.setText(createdDate);

我发现你已经从评论中得到了一些帮助,但是我建议你认真考虑一下你自己的问题,因为旧的日期课程有时很麻烦。 事实上,由于传入值具有
时区
,因此需要使用来解析输入

String createdDate = "2018-05-23T06:39:37+0000";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssZ");
ZonedDateTime localDate = ZonedDateTime.parse(createdDate, formatter);
System.out.println(localDate.format(DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm")));
输出:

2018年5月23日06:39


创建另一个具有新格式的
SimpleDataFormat
实例,并使用已解析的日期调用'format'方法。为什么在
yyyy-MM-dd'T'HH:MM:ss.SSSZ
中有
S
S?您的字符串不包含Milistory,它不是
hh/MM/yyyy
,而是
dd/MM/yyyy
。我的错误。我的理解是你试图用一个字符串日期创建一个日期对象,对吗?对于SDF来说,考虑将字符串解析成适当的日期对象,需要指定正确的格式格式,这在你的情况下是稍有错误的!如果得到纠正,你可以正确地获取你的日期对象……作为一个旁白,考虑扔掉长期过时和臭名昭著的麻烦代码< SimpleDateFormat <代码>和朋友,并添加到你的Android项目中,以便使用<代码> java.时间>代码>,java java日期和时间API。和你一起工作真是太好了<代码>OffsetDateTime.parse(“2018-05-23T06:39:37+0000”,模式的日期时间格式(“uuu-MM-dd'T'HH:MM:ssxx”))
。我不认为OP可以改变输入值。@notyou:我不明白你想说什么,OP得到的值是这样的
2018-05-23T06:39:37+0000
,但你说使用
2018-05-23T06:39:37.235-0530
,但我想他们不能改变这个值。@notyou:我刚刚举了一个2018-05-23T06:39:37.235-0530的例子(这里-0530提到IST时区)。但是2018-05-23T06:39:37.000+0000(GST时区)也会很好地工作。@notyou:无论如何,我没有改变他对代码的输入。Android API 26需要使用
ZoneDateTime
,但我会为其他项目保留。谢谢你的建议。同样的功能也适用于较低级别的Android,因为
java.time
的类已经进行了后端口。你需要的是e安卓版的backport。更多信息。变量名
localDate
在这里似乎很不幸。代码早期版本的遗留问题?@OleV.V.是的-请随意更改变量名-它来自我已经使用过的类似代码。