我有这段代码
DateTimeFormatter dtf = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss Z");
DateTime dateNow = dtf.parseDateTime(new DateTime().toString());
String registerDateStr = dateNow.toString();
但是当我运行它时,它显示日期格式错误:
java.lang.IllegalArgumentException:无效格式:“ 2019-06-13T17:57:47.420 + 08:00”格式错误,格式为“ .420 + 08:00”
形成的日期对我来说似乎正确?我在格式上做错了吗?
答案 0 :(得分:1)
您的格式未指定毫秒,并且时区信息前不需要空格。
此格式将起作用:
DateTimeFormatter dtf = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
答案 1 :(得分:1)
结果不是
DateTimeFormatter dtf = DateTimeFormat.forPattern(“ yyyy-MM-dd'T'HH:mm:ss.SSSZ”);
在javadoc中,
Symbol Meaning Presentation Examples
------ ------- ------------ -------
H hour-of-day (0-23) number 0
m minute-of-hour number 30
s second-of-minute number 55
S fraction-of-second fraction 978
您的格式yyyy-MM-dd'T'HH:mm:ss Z无效,因为您省略了S
(秒的小数,在您的字符串中显示为.420)>
答案 2 :(得分:1)
您的工作太辛苦了。您根本不需要任何显式格式化程序。
DateTime dateNow = new DateTime();
String registerDateStr = dateNow.toString();
System.out.println(registerDateStr);
我刚才跑步时的输出:
2019-06-13T13:04:48.301 + 02:00
如果愿意,您也可以不使用格式化程序就将字符串解析回去,但是我认为没有理由这么做,因为您只会得到一个DateTime
对象,该对象等于从其开始的对象:
DateTime parsedBack = DateTime.parse(registerDateStr);
System.out.println(parsedBack);
2019-06-13T13:04:48.301 + 02:00
您知道吗?
请注意,Joda-Time被认为是很大程度上“完成”的项目。 没有计划进行重大增强。如果使用Java SE 8,请迁移 到
java.time
(JSR-310)。