如何将日期/时间从一个时区转换为另一个时区?

时间:2015-10-21 14:19:08

标签: java datetime timezone date-format

是否可以将日期/时间从 EST (America / New_York)转换为 UTC ,给定格式为yyyy-MM-dd HH:mm:ss的字符串?

示例:

getUTCfromNY("2015-11-01 01:00:00", "NY");

应输出:

GMT Time: 2015-11-01 06:00:00

修改

在以下两个结果之间,您应该选择哪一个?

getUTCfromNY("2015-11-01 01:00:00", "NY") GMT时间:2015-11-01 06 :00:00

getUTCfromNY("2015-11-01 01:00:00", "NY") GMT时间:2015-11-01 05 :00:00

3 个答案:

答案 0 :(得分:4)

SimpleDateFormat#setTimezone()就是答案。一个带有ETC时区的格式化程序,用于解析,另一个用UTC生成输出字符串:

DateFormat dfNy = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.ROOT);
dfNy.setTimeZone(TimeZone.getTimeZone("EST"));
DateFormat dfUtc = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.ROOT);
dfUtc.setTimeZone(TimeZone.getTimeZone("UTC"));

try {
    return dfUtc.format(dfNy.parse(input));
} catch (ParseException e) {
    return null;              // invalid input
}

答案 1 :(得分:3)

您可以使用两个SimpleDateFormat,一个用于解析带有EST时区的日期字符串,一个用于使用UTC时区打印日期

String format = "yyyy-MM-dd HH:mm:ss";
    SimpleDateFormat estFormatter = new SimpleDateFormat(format);
    estFormatter.setTimeZone(TimeZone.getTimeZone("EST"));
    Date date = estFormatter.parse("2015-11-01 01:00:00");

    SimpleDateFormat utcFormatter = new SimpleDateFormat(format);
    utcFormatter.setTimeZone(TimeZone.getTimeZone("UTC"));

    System.out.println(utcFormatter.format(date));

答案 2 :(得分:0)

请参阅下面提到的代码。

     DateFormat utcConverter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
     utcConverter.setTimeZone(TimeZone.getTimeZone("GMT"));
     String sampleDateTime = "2015-11-01 01:00:00";
     DateFormat nyConverter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
     nyConverter.setTimeZone(TimeZone.getTimeZone("EST"));
     Calendar nyCal = Calendar.getInstance();

     nyCal.setTime(nyConverter.parse(sampleDateTime));

     System.out.println("NY TIME :" +nyConverter.format(nyCal.getTime()));

    System.out.println("GMT TIME  :" +utcConverter.format(nyCal.getTime()));