Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从日期开始计时_Java_Android - Fatal编程技术网

Java 从日期开始计时

Java 从日期开始计时,java,android,Java,Android,我想做一个计时器,从日期开始计时, 所以每次我启动应用程序时,计时器都会更新 例如,如果我在2018年11月22日20:00启动计时器,明天21:00它将显示25:00:00 我只找到了如何进行倒计时,或者只是一个简单的计时器。当您使用以下命令启动计时器时,可以获得当前时间: long timerStart = System.currentTimeMillis(); 然后,当你想显示计时器在什么位置时,通过这样做来计算它 long timePassed = System.currentTime

我想做一个计时器,从日期开始计时, 所以每次我启动应用程序时,计时器都会更新 例如,如果我在2018年11月22日20:00启动计时器,明天21:00它将显示25:00:00


我只找到了如何进行倒计时,或者只是一个简单的计时器。

当您使用以下命令启动计时器时,可以获得当前时间:

long timerStart = System.currentTimeMillis();
然后,当你想显示计时器在什么位置时,通过这样做来计算它

long timePassed = System.currentTimeMillis() - timerStart;
这将给出自启动计时器以来的毫秒数。要按您希望的方式对其进行格式化,可以将其传递到此函数中:

public static String convertMillisToHMmSs(long millis) {
    long seconds = millis / 1000
    long s = seconds % 60;
    long m = (seconds / 60) % 60;
    long h = (seconds / (60 * 60));
    return String.format("%d:%02d:%02d", h,m,s);
}

编辑:如其他答案所述,您需要将timerStart存储在某个位置,以便在应用程序关闭/重新打开后跟踪它。我建议您使用类似共享首选项的方式

启动计时器时,您可以通过以下方式获取当前时间:

long timerStart = System.currentTimeMillis();
然后,当你想显示计时器在什么位置时,通过这样做来计算它

long timePassed = System.currentTimeMillis() - timerStart;
这将给出自启动计时器以来的毫秒数。要按您希望的方式对其进行格式化,可以将其传递到此函数中:

public static String convertMillisToHMmSs(long millis) {
    long seconds = millis / 1000
    long s = seconds % 60;
    long m = (seconds / 60) % 60;
    long h = (seconds / (60 * 60));
    return String.format("%d:%02d:%02d", h,m,s);
}

编辑:如其他答案所述,您需要将timerStart存储在某个位置,以便在应用程序关闭/重新打开后跟踪它。除非你愿意创建一个在后台运行几天的应用程序(对于如此复杂的应用程序来说,这是非常不优化的),否则我会推荐类似共享首选项的东西

我认为最好的解决方案是将开始日期(开始时间戳)存储在某个地方。在或中,而不是将应用程序编程为每秒增加或减少一个计数器,而不是每秒计算开始时间戳和当前时间戳之间的差值


关于表现显然有很多问题,但根据你的问题,我猜你对此并不关心,如果您不愿意创建一个在后台运行几天的应用程序(对于如此复杂的应用程序来说,这将是非常不优化的),那么将此解决方案优化为更快、更精确将是一个很好的实践

我认为最好的解决方案是将开始日期(开始时间戳)存储在某个地方。在或中,而不是将应用程序编程为每秒增加或减少一个计数器,而不是每秒计算开始时间戳和当前时间戳之间的差值


显然有很多关于性能的问题,但根据您的问题,我猜您并不关心这一点,优化此解决方案将是一个很好的做法,使其更快、更精确。不过,您同意Quinn的上述观点,您需要在某个地方创建一个存储当前时间的文件。否则,每次应用程序重新启动时,变量
timerStart
将重置


因此,您需要创建一个存储“timerStart”的文件,以便每次启动时,它都会从值更新。

同意上面的Quinn,但是,您需要在某个地方创建一个存储当前时间的文件。否则,每次应用程序重新启动时,变量
timerStart
将重置

因此,您需要创建一个存储“timerStart”的文件,以便每次启动时,它都会根据值进行更新