Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.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_Time_Calendar - Fatal编程技术网

Java 以纳秒为单位获取日历的时间

Java 以纳秒为单位获取日历的时间,java,time,calendar,Java,Time,Calendar,因为Java文档告诉我不要使用System.currentTimeMillis进行比较,所以我开始使用System.nanoTime,这很好 但是我遇到了一些问题,我不得不比较过去发生的事情 Calendar cal = Calendar.getInstance(); cal.add(Calendar.DAY_OF_MONTH, xyz); cal.getTimeMillis(); 以毫秒为单位获取时间很好,但是将其转换为纳秒(将其乘以1000000)是非常不准确的 如何以毫秒为单位获取过去事

因为Java文档告诉我不要使用
System.currentTimeMillis
进行比较,所以我开始使用
System.nanoTime
,这很好
但是我遇到了一些问题,我不得不比较过去发生的事情

Calendar cal = Calendar.getInstance();
cal.add(Calendar.DAY_OF_MONTH, xyz);
cal.getTimeMillis();
毫秒
为单位获取时间很好,但是将其转换为
纳秒
(将其乘以1000000)是非常不准确的


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

Java中的
Calendar
类不包含纳秒信息。所以你不能得到那个


如果需要详细信息,您需要将事件的纳秒存储为
long
:您也不能这样做,nanoTime()不是当前时间的表示形式,但您仍然可以存储它来计算旧进程的运行时间。

您使用什么数据类型进行1000000的乘法?也许你应该使用一个大的十进制,这对你来说已经足够精确了。

你想实现什么?您真正的问题是什么?“既然Java文档告诉我,不要使用System.currentTimeMillis进行比较”——此限制仅用于测量相邻事件之间的运行时间。如果您使用的是
日历
,根据定义,您并不是在测量临近事件之间经过的时间。自Unix纪元以来的纳秒数比
long
所能处理的纳秒数大,好吧。@Commonware Ok,谢谢,我将切换回
毫秒内的时间。谢谢。@LuiggiMendoza比较两个事件的时间。事件可能发生在过去(直到1970年,开始计算unix时间)。因此,您有一个初始日期(从年到秒)和一个结束日期(也从年到秒),您想/需要知道两者之间的时间量?我不能存储纳秒,只要时间旅行不是发明的。;)所以,我担心,你没有办法检索这些信息。根本不需要这样做。如果两个数字都使用相同的乘法常数,那么它可以被分解出来。