为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

叮当猫咪 2022-05-12 18:50:12
我有一个时间字符串“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));                    }
查看完整描述

2 回答

?
噜噜哒

TA贡献1784条经验 获得超7个赞

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

如果您使用 ("HH:mm:ss z") 解析 "00:01:00 GMT",您将获得预期的 60000 毫秒。


查看完整回答
反对 回复 2022-05-12
?
莫回无

TA贡献1865条经验 获得超7个赞

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


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

formatter.setTimeZone(TimeZone.getTimeZone("UTC"));

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


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


查看完整回答
反对 回复 2022-05-12
  • 2 回答
  • 0 关注
  • 202 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信