从当前TimeZone转换为UTC减量2小时而不是1

时间:2014-03-29 19:33:41

标签: android datetime datetimeoffset android-date java-time

我想将Date从我当前的TimeZone转换为UTC。

结果对我来说是不可理解的。

代码:

public static String convertToUTC(String dateStr) throws ParseException
{

    Log.i("myDateFunctions", "the input param is:"+dateStr);

    String uTCDateStr;


    Date pickedDate = stringToDate(dateStr, "yyyy-MM-dd HH:mm:ss");

    Log.i("myDateFunctions", "the input param after it is converted to Date:"+pickedDate);


    TimeZone tz = TimeZone.getDefault();
    Date now = new Date();
    Log.i("myDateFunctions:", "my current Timezone:"+tz.getDisplayName()+" +"+(tz.getOffset(now.getTime()) / 3600000));

    // Convert to UTC
    SimpleDateFormat converter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    converter.setTimeZone(TimeZone.getTimeZone("UTC"));
    uTCDateStr = converter.format(pickedDate);

    Log.i("myDateFunctions", "the output, after i converted to UTC timezone:"+uTCDateStr);

    return uTCDateStr;

}

LogCat结果是:

03-29 20:31:46.804: I/myDateFunctions(18413): the input param is:2014-04-29 20:00:00
03-29 20:31:47.005: I/myDateFunctions(18413): the input param after it is converted to Date:Tue Apr 29 20:00:00 CEST 2014
03-29 20:31:47.005: I/myDateFunctions:(18413): my current Timezone:Central European Time +1
03-29 20:31:47.005: I/myDateFunctions(18413): the output, after i converted to UTC timezone:2014-04-29 18:00:00

如你所见: 我的TimeZone是CET (GMT + 1)

那么为什么如果我的输入 20:00我会回到18:00而不是19:00?

2 个答案:

答案 0 :(得分:2)

问题是夏令时。 UTC没有它,如果你这样做,它将在一年中的部分时间内将差异增加1小时。

答案 1 :(得分:0)

answer by Game Sechan似乎是正确的。

我只想表明在使用Joda-Time或java.time而不是臭名昭着的java.util.Date和.Calendar类时,这项工作有多容易。

约达时间

Joda-Time 2.4。

String inputRaw = "2014-04-29 20:00:00";
String input = inputRaw.replace( " ", "T" );
DateTimeZone timeZoneIntendedByString = DateTimeZone.forID( "America/Montreal" ); // Or DateTimeZone.getDefault();
DateTime dateTime = new DateTime( input, timeZoneIntendedByString );
DateTime dateTimeUtc = dateTime.withZone( DateTimeZone.UTC ); // Adjust time zones, but still same moment in history of the Universe.