我每隔100毫秒在Java Runnable
中执行一个Android应用程序中的ScheduledExecutorService
。作为run()
块的一部分,我需要将当前秒数设置为0-59,将毫秒数量设置为0-999。两者都应该在当地时间,虽然UTC也是可行的。
绝对最快的方法是什么?不需要国际化/独特的日历。
目前我正在以下面的方式使用Calendar
,但我认为使用System.currentTimeMillis()
并做一些数学运算会更快,我会感激任何输入。
Calendar calendar = Calendar.getInstance();
int seconds = calendar.get(Calendar.SECOND);
如果相关,这实际上是在Android应用程序中。
编辑以澄清
获取当前秒数为0-59(即相对于当前分钟)是至关重要的,因此System.currentTimeMillis()
带有数学成本,如上所述。我不确定的是,这个数学+系统调用是否会比调用Calendar
更快,或者是否有任何其他选项(如Joda Time)可能更少足迹。
作为参考,下面是我最直接的方法,从Unix时间戳得到秒(0-59)。
double seconds = Math.floor(((Math.floor(System.currentTimeMillis() / 1000) % 86400) % 3600) % 60);
答案 0 :(得分:6)
你不会比System.currentTimeMillis()
更快地找到任何。
尽管如此,快速和正确并不一定是齐头并进的。一如既往:考虑使用Joda Time。如果没有库,你就无法正确地击中所有边缘情况。