【发布时间】:2019-03-12 11:32:57
【问题描述】:
我有毫秒值,并希望以hh:mm:ss 格式显示从当前毫秒值减去 5 分钟的时间。
代码
String str = String.format("%02d:%02d:%02d",
TimeUnit.MILLISECONDS.toHours((cal.getTimeInMillis()-300000)),
TimeUnit.MILLISECONDS.toMinutes(cal.getTimeInMillis()-300000) -
TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(cal.getTimeInMillis()-300000)),
TimeUnit.MILLISECONDS.toSeconds(cal.getTimeInMillis()-300000) -
TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(cal.getTimeInMillis()-300000)));
Toast.makeText(getApplicationContext(), "Alarm Set."+str, Toast.LENGTH_LONG).show()
立即输出
Alarm Set. 386467:25:00
需要输出
Alarm Set. 07:25:00
如您所见,minutes 和 seconds 正在安静地检索,但 hours 存在一些问题。
附言
1.我推荐了this post。他们说效果很好。但不知道为什么我的情况不行。
2.我确定我想得到什么作为小时值,即07,因为我已经使用Calendar.HOUR 设置了值,如果我使用cal.get(Calendar.HOUR),它也会显示出来。当然是@ 的对象987654332@班级。
替代解决方案
SimpleDateFormat sdf = new SimpleDateFormat("hh:mm:ss");
String str1 = sdf.format(new Date(cal.getTimeInMillis()-300000));
Toast.makeText(getApplicationContext(), "Alarm Set."+str1, Toast.LENGTH_LONG).show();
【问题讨论】:
-
使用 SimpleDateFormat,我看到有人建议。然后只需格式化您的时间 - 适当的毫秒数。
-
我确实使用它并解决了问题。谢谢。但仍然想知道这段代码 sn-p 的问题是什么,因为其他人说这工作正常。
-
所写的解决方案不起作用。仅以第一个小时的价值为例。如果当前时间是小时后 2 秒,它仍将显示当前小时,因为您没有从小时值中减去任何时间。分钟呢?如果当前分钟数是 2,你减去 5,它会得到什么?正确的方法是以毫秒为单位获取时间,减去 5 分钟,然后输出值。那应该行得通。但即便如此,使用 SimpleDateFormat 更有意义。
-
第一个小时是什么意思?在这种情况下,我与当前小时和当前分钟无关。我只是在我的应用程序中设置了一个警报,它将在设定时间的 5 分钟之前触发。
-
啊,不清楚的是您正在寻找相对时间(您的毫秒值已经应该是计时器到期之前的剩余时间)。您引用的另一篇文章是“以毫秒为单位的剩余时间”(例如,timerExpiration - System.currentTimeMillis())。正如我认为其中一个答案所解释的那样,您的价值已经关闭了几个小时,因为您显示的是到期时间,而不是到期前的剩余时间。我认为这解释了混乱。
标签: java android date calendar timeunit