datetime - java.lang.IllegalArgumentException:无效格式:“2018 年 5 月 24 日星期四 14:00:00 GMT+0200”
问题描述
我正在尝试将“Thu May 24 2018 14:00:00 GMT+0200”之类的字符串日期转换为 Joda DateTime (v.2.9.9),但我获得了无效格式异常:
String pattern = "EEE MMM dd yyyy HH:mm:ss 'GMT'Z";
DateTimeFormatter formatter = DateTimeFormat.forPattern(pattern);
for (int i=0; i < arrayHorarios.length; i++) {
DateTime dateTime = new DateTime();
dateTime = formatter.withOffsetParsed().parseDateTime(arrayHorarios[i]);
}
我究竟做错了什么?我的目标是将所有包含日期的字符串转换为 Java 日期,然后将它们保存到数据库中……最简单的方法是什么?(有或没有乔达)。
编辑:
我改变了正确的模式。使用 Java DateFormat 也没有用:
ObjectMapper mapper = new ObjectMapper();
String[] arrayHorarios = mapper.readValue(horariosSave, String[].class);
DateFormat df = new SimpleDateFormat("EEE MMM dd yyyy HH:mm:ss z", Locale.ENGLISH);
//sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
List<Date> hor = new ArrayList<Date>();
Date date = new Date();
try {
for (int i=0; i < arrayHorarios.length; i++) {
// conversión de String a Date de los valores
System.out.println("Horario nº:"+i);
System.out.println("String = "+arrayHorarios[i]);
date = df.parse(arrayHorarios[i]);
System.out.println("Date = " + df.format(date));
hor.add(date);
}
System.out.println("Clases guardadas:"+hor.size());
} catch (Exception e) {
e.printStackTrace();
}
这样我得到了这个异常:
java.text.ParseException:无法解析的日期:“2018 年 5 月 25 日星期五 12:00:00 GMT+0200”在 java.text.DateFormat.parse(DateFormat.java:366)
解决方案
java.time
我想知道是否有办法使用 Java 8 Util Time。
当然有。
String pattern = "EEE MMM dd yyyy HH:mm:ss 'GMT'Z";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern, Locale.ENGLISH);
String horario = "Thu May 24 2018 14:00:00 GMT+0200";
OffsetDateTime dateTime = OffsetDateTime.parse(horario, formatter);
System.out.println(dateTime);
印刷:
2018-05-24T14:00+02:00
使用的进口是:
import java.time.OffsetDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
乔达时间
并不是说您会后悔升级到java.time
,您的 Joda-Time 代码似乎也在工作:
String pattern = "EEE MMM dd yyyy HH:mm:ss 'GMT'Z";
DateTimeFormatter formatter = DateTimeFormat.forPattern(pattern);
String horario = "Thu May 24 2018 14:00:00 GMT+0200";
DateTime dateTime = formatter.withOffsetParsed().parseDateTime(horario);
System.out.println(dateTime);
这打印:
2018-05-24T14:00:00.000+02:00
我怀疑你的问题可能出在其他地方。
PS 你可能已经知道Joda-Time 主页上写着:
现在要求用户迁移到
java.time
(JSR-310)。
推荐阅读
- javascript - webpack:无法解析“jquery-ui-bundle”
- javascript - JavaScript/jQuery:选择列表/下拉值为“其他”时添加文本框
- node.js - Angular CLI 不起作用,因此尝试重新安装但出现此错误
- javascript - 自定义 graphql 查询
- javascript - React Hook "useEffect" 在函数 "shoes" 中被调用,它既不是 React 函数组件也不是自定义 React Hook
- java - 使用 ZipOutputStream 压缩时 zip 无效
- javascript - React Material-UI 如何添加一个与表格行单击分开的复选框
- android - Mediaplayer 在尝试通过 url 读取音频时返回 (-1, 1004) 错误,Firebase 存储
- c - 警告赋值使指针从整数而不在 C 中进行强制转换
- python - 创建模式以替换部分时间戳