Java TimeZone Conversion产生相反的结果。

时间:2016-01-12 20:53:42

标签: java timezone utc

以下是我正在使用的示例。

import java.util.*;
import java.text.*;

public class TimeZoneTest
{

public static final String UTC_ZONE = "UTC";
static String utcDateString = "01/11/2016 11:00:00";

public static void main (String [] args)
{
    DateFormat df;

    try{

        df = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
        System.out.println("Original Date : " + utcDateString);
        df.setTimeZone(TimeZone.getTimeZone("UTC"));
        Date date = df.parse(utcDateString);
        System.out.println("     In its Date format : " + date.toString());
        System.out.println("     In its GMT format : " + date.toGMTString());
        System.out.println("     In its Local format : " + date.toLocaleString());
    }
    catch (ParseException ex)
    {
        System.out.println("Exception!!!!");
    }

}
}

这是产生的输出。

Original Date : 01/11/2016 11:00:00
     In its Date format : Mon Jan 11 06:00:00 EST 2016
     In its GMT format : 11 Jan 2016 11:00:00 GMT
     In its Local format : Jan 11, 2016 6:00:00 AM

当使用时间11:00:00并将TimeZone设置为UTC时,我原本期望将当地时间(东部)表示的11:00:00转换为UTC,这将产生16:00 :00

相反,它似乎取字符串值11:00:00并将其作为UTC时间而不是本地时间处理并返回我当地时间06:00:00。

这是预期的结果吗? 设置时区时,是否应将解析时间(11:00:00)转换为该时区并生成(16:00:00)? 要么 设置时区时,它是否应该将正在解析的时间(11:00:00)视为处于该时区并返回本地时间(06:00:00)?

1 个答案:

答案 0 :(得分:1)

你的最后一句话是真的:"或者当你设置时区时,它是否应该将正在解析的时间(11:00:00)视为处于该时区并返回当地时间(06:00:00)?"

基本上,您在DateFormat中设置时区,然后解析没有时区信息的日期,因此它将使用DateFormat中的时区将字符串从1970年1月1日转换为特定的毫秒数。然后,用" toString"打印该日期。将使用您机器的时区将其转换回String。但整个计划的日期是一样的,只是格式/时区不同。