2 回答
TA贡献1796条经验 获得超10个赞
只需重写方法Activity.onPause()
并Activity.onResume()
保存时间戳,然后再执行计算。首选项名称中的一个空格Zeit save
可能会导致它始终返回默认值0
;最好用_
下划线替换它,例如。timestamp_paused
。
TA贡献1777条经验 获得超10个赞
博士
我无法帮助将值保存到存储中,因为我不使用 Android。但我可以展示如何记录当前时刻并稍后计算经过的时间。
记录当前时刻。
Instant.now().toString()
"2019-09-24T20:50:52.827365Z"
解析该字符串并捕获经过的时间:
Duration // Represent a span-of-time not attached to the timeline.
.between( // Calculate time elapsed between a pair of moments.
Instant.parse( "2019-09-24T20:50:52.827365Z" ) , // Parse string in standard ISO 8601 format. The `Z` on the end means UTC, pronounced “Zulu”.
Instant.now() // Capture the current moment in UTC.
) // Returns a `Duration` object.
.toMillis() // Interrogates the `Duration` object for its total elapsed time in milliseconds, effectively truncating any microseconds/nanoseconds.
java.time
跟踪时间的现代方法使用java.time类,具体来说:
Instant
代表 UTC 中的某个时刻Duration
表示与时间线无关的时间跨度,基本上是纳秒的计数。
捕获 UTC 中的当前时刻。
Instant instant = Instant.now() ;
使用标准ISO 8601格式保留该值的文本表示形式。
String output = instant.toString() ;
读取存储的字符串,并将其解析为Instant
.
String input = "2019-09-24T20:50:52.827365Z" ; Instant then = Instant.parse( input ) ;
捕获当前时刻,并将经过的时间计算为“持续时间”。
Instant now = Instant.now() ; Duration d = Duration.of( then , now ) ;
如果您希望将经过的时间作为总毫秒数,请询问该Duration
对象。
long milliseconds = d.toMillis() ; // Total elapsed time in milliseconds, truncating any microseconds/nanoseconds.
添加回答
举报