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