以下是解析日期的代码,它抛出了解析异常。谁能帮忙解决这个问题?我不想使用任何其他第三方API。
DateFormat df = new SimpleDateFormat("dd-MM-yyyy HH:mm:ssZ");
Date newDate;
try {
newDate = df.parse("28-04-2016 23:59:59 US/Eastern");
df.setTimeZone(TimeZone.getTimeZone("UTC"));
String strdate = df.format(newDate);
System.out.println("The date and time in :: UTC is ::" + strdate);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
答案 0 :(得分:0)
简单java API中的Timezone处理并不是那么简单,这就是为什么Java包含了Java 8的JODA时间。为了实现您的问题,您可以执行以下操作:
String sourceDateTimeTz = "28-04-2016 23:59:59 US/Eastern";
String sourceDateTime = sourceDateTimeTz.substring(0, 19);
TimeZone sourceTz = TimeZone.getTimeZone(sourceDateTimeTz.substring(20));
DateFormat df = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
Date sourceDate;
try {
sourceDate = df.parse(sourceDateTime);
Calendar sourceCalendar = Calendar.getInstance();
sourceCalendar.setTime(sourceDate);
sourceCalendar.setTimeZone(sourceTz);
Calendar targetCalendar = Calendar.getInstance();
for (int field : new int[] { Calendar.YEAR, Calendar.MONTH, Calendar.DAY_OF_MONTH, Calendar.HOUR,
Calendar.MINUTE, Calendar.SECOND, Calendar.MILLISECOND }) {
targetCalendar.set(field, sourceCalendar.get(field));
}
targetCalendar.setTimeZone(TimeZone.getTimeZone("UTC"));
Date targetDate = targetCalendar.getTime();
System.out.println(df.format(targetDate));
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}