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

时间:2019-01-20 22:35:37

标签: java android

我有一个时间字符串“ 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();
}

CountDownTimer:

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));
                    }

2 个答案:

答案 0 :(得分:0)

我认为您遇到时区问题。字符串“ 00:01:00”未指定世界时间,因为其上没有时区。解析将在某个默认时区完成,并且您的偏移量显然为3(我的似乎是-5)。

如果使用(“ HH:mm:ss z”)解析“ 00:01:00 GMT”,则将得到期望的60000毫秒。

答案 1 :(得分:0)

实例化格式化程序后,尝试设置时区,如下所示:

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

或者如果您需要本地时区,则:

formatter.setTimeZone(Calendar.getInstance().getTimeZone());