【发布时间】:2018-11-03 01:37:28
【问题描述】:
我正在使用 Java 1.7。
尝试转换:
2018-05-23T23:18:31.000Z
进入
2018-05-23 23:18:31
DateUtils 类:
public class DateUtils {
public static String convertToNewFormat(String dateStr) throws ParseException {
TimeZone utc = TimeZone.getTimeZone("UTC");
SimpleDateFormat sdf = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss");
sdf.setTimeZone(utc);
Date convertedDate = sdf.parse(dateStr);
return convertedDate.toString();
}
}
尝试使用时:
String convertedDate = DateUtils.convertToNewFormat("2018-05-23T23:18:31.000Z");
System.out.println(convertedDate);
得到以下异常:
Exception in thread "main" java.text.ParseException: Unparseable date: "2018-05-23T23:22:16.000Z"
at java.text.DateFormat.parse(DateFormat.java:366)
at com.myapp.utils.DateUtils.convertToNewFormat(DateUtils.java:7)
我可能做错了什么?
有没有更简单的方法(例如 Apache Commons lib)?
【问题讨论】:
-
虽然您可以删除
T,但Z是偏移量,应该按原样解析,否则很可能出现错误结果。顺便考虑一下扔掉长期过时且臭名昭著的麻烦SimpleDateFormat和朋友,并将 ThreeTen Backport 添加到您的项目中,以便使用现代 Java 日期和时间 APIjava.time。使用起来感觉好多了。 -
巧合的是,我昨天刚刚写了this answer,它显示了解析字符串的正确、现代、良好和简单的方法。
-
您输入的日期时间字符串采用 UTC(由
Z后缀表示)。你想要你的输出在你当地的时区吗?或者哪个时区? -
仅供参考,麻烦的旧日期时间类,例如
java.util.Date、java.util.Calendar和java.text.SimpleDateFormat现在是 legacy,被 Java 8 及更高版本中内置的 java.time 类所取代.见Tutorial by Oracle。
标签: java java-7 utc datetime-parsing parseexception