ParseException:解析日期的自定义方法中的无法解析日期[重复]

问题描述 投票:0回答:4

我写了一个解析日期的方法。当我通过以下日期作为参数2019-03-05 06:15:00时,我得到了一个java.text.ParseException: Unparseable date: "2019-03-05 06:15:00"

逻辑有什么问题?

public String convertDate(String val) throws ParseException {
    return "cast('" + new SimpleDateFormat("yyyy-MM-dd HH:mm:SS").format(
            new SimpleDateFormat("yyyy-MM-dd'T'HH:mm'Z'").parse(val)) + "' as ts)";
}
java date simpledateformat
4个回答
1
投票

你试图使用明显不适合的模式2019-03-05 06:15:00解析字符串yyyy-MM-dd'T'HH:mm'Z'


1
投票

将方法更改为以下

public String convertDate(String val) throws ParseException {
        return "cast('" + new SimpleDateFormat("yyyy-MM-dd'T'HH:mm'Z'").format(
                new SimpleDateFormat("yyyy-MM-dd HH:mm:SS").parse(val)) + "' as ts)";
}

或通过

2019-03-05T06:15Z

1
投票

好吧,你的代码没有任何问题,除了这个SS并且也改变了顺序。

第二分钟的第55号

S分数分数978

   public static String convertDate(String val) throws ParseException {
    return "cast('" + new SimpleDateFormat("yyyy-MM-dd'T'HH:mm'Z'").format(
            new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(val)) + "' as ts)";
}

1
投票

Z代表区域偏移。每个文档

Z zone-offset offset-Z +0000; -0800; -08:00;

所以你的String应该是,例如

2019-03-05T06:15+0100

您的模式似乎并不能反映您想要完成的任务。 Z不仅仅是一封简单的字母。

yyyy-MM-dd'T'HH:mmZ

无论如何,避免使用SimpleDateFormat,而是使用DateTimeFormatter,这是新的Java 8时间API的一部分。

final String val = "2019-03-05T06:15+0100";
final TemporalAccessor parse = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mmZ").parse(val);
final String format = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:SS").format(parse);

通过输入

2019-03-05T06:15+01:00

你甚至可以使用

final TemporalAccessor parsed = DateTimeFormatter.ISO_DATE_TIME.parse(val);
© www.soinside.com 2019 - 2024. All rights reserved.