【问题标题】:Get time of a calendar in nanoseconds以纳秒为单位获取日历时间
【发布时间】:2013-01-21 20:43:00
【问题描述】:

由于 Java 文档告诉我,不要使用 System.currentTimeMillis 进行比较,我开始使用 System.nanoTime 这很好。
但是我遇到了一些问题,我必须比较过去的事件。

Calendar cal = Calendar.getInstance();
cal.add(Calendar.DAY_OF_MONTH, xyz);
cal.getTimeMillis();

可以很好地获取milliseconds 中的时间,但是将其转换为nanoseconds(将其乘以1000000)远不准确。

如何获取过去某个事件的时间(以毫秒为单位)?

【问题讨论】:

  • 你想完成什么?你真正的问题是什么?
  • “既然 Java 文档告诉我,不要使用 System.currentTimeMillis 进行比较”——此限制仅用于测量近距离事件之间的经过时间。如果您使用Calendar,根据定义,您不会测量近事件之间的经过时间。自 Unix 纪元以来的纳秒数比 long 可以处理的更大,AFAIK。
  • @CommonsWare 好的,谢谢,我将切换回milliseconds 中的时间。谢谢。
  • @LuiggiMendoza 比较两个事件的时间。事件可以是过去(直到 1970 年,有开始计算 unix 时间)。
  • 那么,您有一个初始日期(从年到秒)和一个结束日期(也从年到秒),您想/需要知道两者之间的时间量吗?

标签: java time calendar


【解决方案1】:

Java 中的Calendar 类不包含纳秒信息。所以你无法得到它。

如果您需要该详细信息,您需要将纳秒存储为long,以便稍后比较事件。:您也不能这样做,nanoTime() 不是当前时间的表示,但您仍然可以存储它以评估旧进程的经过时间。

【讨论】:

  • 我无法存储纳秒,只要没有发明时间旅行。 ;)
  • 所以,恐怕您无法检索该信息。
【解决方案2】:

您使用什么数据类型来乘以 1,000,000 ?也许您应该使用 BigDecimal,这对您来说已经足够准确了。

【讨论】:

  • 如果两个数字都使用相同的乘法常数,则根本不需要这样做。
猜你喜欢
  • 2015-10-09
  • 2012-10-07
  • 2011-01-24
  • 1970-01-01
  • 2021-03-19
  • 1970-01-01
  • 2011-04-19
  • 1970-01-01
  • 2019-02-04
相关资源
最近更新 更多