猿问

将时间字符串转换为 Long 会产生错误的值

我有一个时间字符串“00:01:00”。当我通过 SimpleDateFormat("HH:mm:ss) 将其转换为 long 时,我得到 10860000 毫秒,相当于 03:01:00。


对于“00:59:00”,我得到“03:57:00”,所以我不知道发生了什么,但它使我的毫秒数增加了 3 小时。


代码:


String time = String.format("%02d",hourOfDay) + ":" + String.format("%02d", minute) + ":" + String.format("%02d", seconds);


tvTimer.setText(time);


try {

     DateFormat formatter = new SimpleDateFormat("HH:mm:ss", Locale.ENGLISH);

     Time timeValue = new Time(formatter.parse(time).getTime());


     long initTimer = timeValue.getTime

} catch (ParseException e) {

     e.printStackTrace();

}

倒计时器:


timer = new CountDownTimer(initTimer, 1000) {

                    @Override

                    public void onTick(long l) {


                        long secondsInMilli = initTimer / 1000;

                        long minutesInMilli = secondsInMilli / 60;

                        long hoursInMilli = minutesInMilli / 60;


                        long elapsedSeconds = secondsInMilli % 60;

                        long elapsedMinutes = minutesInMilli % 60;

                        long elapsedHours = hoursInMilli % 60;


                        tvTimer.setText(String.format("%02d", elapsedHours) + ":" + String.format("%02d", elapsedMinutes) +":" + String.format("%02d", elapsedSeconds));

                    }


叮当猫咪
浏览 203回答 2
2回答

噜噜哒

我认为你有一个时区问题。字符串“00:01:00”没有指定世界时间,因为上面没有时区。解析将在某个默认时区完成,您的偏移量显然是 3(我的似乎是 -5)。如果您使用 ("HH:mm:ss z") 解析 "00:01:00 GMT",您将获得预期的 60000 毫秒。

莫回无

在实例化格式化程序后尝试设置时区,如下所示:DateFormat formatter = new SimpleDateFormat("HH:mm:ss", Locale.ENGLISH);formatter.setTimeZone(TimeZone.getTimeZone("UTC"));或者如果您需要本地时区,则:formatter.setTimeZone(Calendar.getInstance().getTimeZone());
随时随地看视频慕课网APP

相关分类

Java
我要回答