Android Formatter没有给出正确的时间

时间:2014-08-03 16:33:16

标签: android android-timepicker

所以我在Android中有这个代码

            DateFormat formatter = new SimpleDateFormat("HH:mm", Locale.getDefault());
            Calendar calendar = Calendar.getInstance();
            calendar.setTimeInMillis(millisUntilFinished);
            textView.setText(formatter.format(calendar.getTime()));

这是我如何将值传递给此方法,其中小时和分钟字符串是" 8"和" 30"例如

Calendar c = Calendar.getInstance();
            String s = ApplicationPreferences.getWakeUp(ActivityStage1.this);
            String[] separated = s.split("\\:");
            String hours = separated[0];
            String minutes = separated[1];
            c.add(Calendar.DAY_OF_MONTH, 1);
            c.set(Calendar.HOUR_OF_DAY, Integer.parseInt(hours));
            c.set(Calendar.MINUTE, Integer.parseInt(minutes));
            c.set(Calendar.SECOND, 0);
            c.set(Calendar.MILLISECOND, 0);
            long timeUntilStageTwo = (c.getTimeInMillis() - System.currentTimeMillis());
            startStageTwoTimer(timeUntilStageTwo);

所以long millisUntilFinished中的值类似于58441666,大概是16小时20分钟,但由于某种原因,它在文本视图中显示的结束时间是3小时,我甚至尝试了不同的locales传递给SimpleDateFormat,但仍然相同,为什么会发生这种情况?

1 个答案:

答案 0 :(得分:0)

当系统时钟以UTC运行时,您的Calendar c位于您当地的UTC + 3时区。因此相差3个小时。

在计算其毫秒值之前,您可以使用setTimeZone()在日历上设置显式时区。

如果您希望自己进行计算,可以使用TimeZone.getDefault()获取用户的时区,然后使用getOffset(time)在指定的UTC时间获得毫秒偏移量。