0

所以我在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 小时,我什至尝试将不同的语言环境传递给SimpleDateFormat,还是一样,为什么会这样?

4

1 回答 1

0

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

您可以setTimeZone()在计算其毫秒值之前在日历上设置明确的时区。

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

于 2014-08-03T17:30:47.750 回答