我想要过去24小时的nanoTime()。 long currentDate = System.nanoTime(); 如何通过减去24小时找到nanoTime? 是否可以从Date date = new Date()获得nanoTime?
答案 0 :(得分:3)
System.nanoTime()
目前无法使用。正如文档所说,它“与系统或挂钟时间的任何其他概念无关”。这也意味着从Date
获得兼容的纳秒时间是没有意义的。
而是使用java.time.Instant
为您的时间。 Instant.now()
为您提供当前时间,从Java 9开始,它在大多数平台上具有非常高的分辨率(我的Mac上的微秒,我相信它只是nanoTime
的好处)。然后使用例如yourInstant.minus(1, ChronoUnit.DAYS)
或yourInstant.minus(Duration.ofHours(24))
。
我需要在数据库中存储长值。
编辑:我希望将Instant
这样存储到数据库中,或者如果不可能,那么它的字符串表示就是从{{1}获取它方法(toString
类可以将此字符串解析回Instant
)。因为我知道你需要保存很长的价值:这将是可能的,直到2262-04-11T23:47:16.854775807Z,接下来的200多年。如果这足够好,这里是如何从纪元作为Instant
的长值获得纳秒:
Instant
使用 Instant instantNow = Instant.now();
long now = Math.addExact(
Math.multiplyExact(instantNow.getEpochSecond(), 1_000_000_000),
instantNow.getNano());
课程中的addExact
和multiplyExact
而非普通Math
和+
的重点是,如果出现溢出,您会收到通知也就是说,如果该值不适合*
。
是否可以将日期转换为即时,因为我们在UI [?]
上按日期功能搜索
要将日期(如2017年12月25日)转换为long
,您需要确定转化的时区,因为它在地球上的任何地方都不会是同一个日期。例如:
Instant
要回答原始问题(怀疑您可以使用它),请从 ZoneId zone = ZoneId.of("Europe/Brussels");
LocalDate date = LocalDate.of(2017, Month.DECEMBER, 25);
Instant asInstant = date.atStartOfDay(zone).toInstant();
减去24小时:
System.nanoTime()