尝试从美国/东部时区转换日期时解析异常

时间:2017-01-04 06:04:45

标签: java

以下是解析日期的代码,它抛出了解析异常。谁能帮忙解决这个问题?我不想使用任何其他第三方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();
    }

1 个答案:

答案 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();
    }