这个问题在这里已有答案:
我写了一个解析日期的方法。当我通过以下日期作为参数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)";
}
你试图使用明显不适合的模式2019-03-05 06:15:00
解析字符串yyyy-MM-dd'T'HH:mm'Z'
。
将方法更改为以下
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
好吧,你的代码没有任何问题,除了这个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)";
}
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);