Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.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_Time_Timer - Fatal编程技术网

Java 我如何知道我的应用程序中的两个操作之间经过了多少时间?

Java 我如何知道我的应用程序中的两个操作之间经过了多少时间?,java,android,time,timer,Java,Android,Time,Timer,我正在开发一个Android应用程序,我遇到了这个问题 例如,如果我删除一个文件(操作a)并收到一个新文件(操作B),我想知道两个操作之间经过了多少时间。我希望在用户更改系统日期、关闭互联网或重新启动设备的情况下,它也能正常工作 我知道存在SystemClock.elapsedRealtime(),但如果用户重新启动设备,它的值将从零重新启动 我不能使用System.currentTimeMillis(),因为如果用户更改日期,它会更改 我从网上找不到约会对象 谢谢你只需要在活动前后的某个地方抓

我正在开发一个Android应用程序,我遇到了这个问题

例如,如果我删除一个文件(操作a)并收到一个新文件(操作B),我想知道两个操作之间经过了多少时间。我希望在用户更改系统日期、关闭互联网或重新启动设备的情况下,它也能正常工作

我知道存在
SystemClock.elapsedRealtime()
,但如果用户重新启动设备,它的值将从零重新启动

我不能使用
System.currentTimeMillis()
,因为如果用户更改日期,它会更改

我从网上找不到约会对象


谢谢

你只需要在活动前后的某个地方抓紧时间,从另一个地方抓紧时间。这将使用系统时钟,但您同样可以从其他来源获得实时数据

    long startTime = System.currentTimeMillis();
    // Your code
    System.out.println("Operation took " + (System.currentTimeMillis() - startTime) + " milliseconds");

使用
System.currentTimeMillis()
。它获取自纪元(1970年1月1日)以来经过的时间

您需要一个全局变量:

long start;
关于第一项行动:

start = System.currentTimeMillis();
由于这是从新纪元开始的时间,重新启动设备不会改变它(即,
System.nanoTime
将被重置)。但是,与大多数其他方法一样,更改设备的时间并不安全。如果有人将设备上的时间更改回新纪元的开始,您将遇到一些问题

请注意,如果时间发生更改,则无法获取事件发生后的确切时间。也就是说,如果用户执行操作A,等待几个小时,将时钟设置回几个小时前,基本上没有离线方式可以检查。如果您使用服务器,您可以从中获取时间,但是没有任何方法可以获得准确的、未修改的脱机时差,这是防篡改的(篡改会改变时间)

TL;DR:
系统。currentTimeMillis
是一个脱机选项,但它不安全,无法避免时间变化。如果您需要它独立于用户更改设备时间来显示正确的时差,请使用服务器

编辑:


如果您不能使用
System.currentTimeMillis
或从internet获取时间,则根本无法测量时间。另外,每个Java/Android API都依赖于System.currentTimeMillis(或者以其他方式获取当前时间)。示例:Date类可以转换为表示当前时间(以毫秒为单位)的Long。对于长期计时,您必须使用System.currentTimeMillis或服务器<代码>系统.nanoTime在JVM重新启动时重新启动。elapsedRealTime也是如此。

你可以尝试使用
System.currentTimeMilis()
,或者从互联网上获取时间。如果计算机时钟发生变化,机器与互联网断开连接,你会知道实时时间吗?@Severity有人不需要知道实时时间,只需要知道经过的时间。@Nathan Nope,这是自1970年1月1日以来的时间了——听起来有点像你在问不可能的事情。你可以看一下,你的两行是两个不同的操作,我有两个不同的类,可以在两个不同的时刻执行,第二行可能在两个月后执行。如果用户更改了日期,这将不起作用。是的,Gigi,我在你编辑之前发布了它,你在其中包含了那些额外的要求。