2012-03-28 107 views
0

我有一定的日期和时间值28-3-2012(日期) - 10:36:45(时间)。我希望将这个整个时间戳以纳秒的精度转换为纳秒。因为在用户会输入时间和日期如图所示,但内部我必须精确到几纳秒,并将整个事情转换为纳秒,以形成分配给在特定时间创建的特定对象的唯一键。 能有一个人,请帮助我一样..将时间戳转换为纳秒

+4

将此用作唯一键的想法存在根本性缺陷。如果您有多核处理器,则不可能保证在同一时间不会创建两个对象。 – Jesper 2012-03-28 05:34:31

回答

0

我想最简单的方法就是使用JDK的支持。尝试以下

TimeUnit.NANOSECONDS.toNanos(持续时间)

这里单一参数的持续时间将是你要转换为纳秒其长期价值。

希望这会有所帮助。

1

,如果您有Date对象:

long nanosecond = date.getTime() * 1000000; 

,或者你可以分析你的时间字符串,如果它看起来像(DD/MM/YYYY HH:MM: SS)

DateFormat df = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); 
Date date = df.parse(dateString); 
long nanosecond = date.getTime() * 1000000; 
+0

但是如果在一秒钟内创建了几个对象,那么这会造成一个问题吧?因为我打算使用这个值作为存储在我的对象散列映射中的关键。时间粒度必须精确到精确的纳秒时间。 – kuki 2012-03-28 05:26:31

+3

@kuki如果原始时间戳只准确到第二个时间(例如28-3-2012 10:36:45),那么您如何说自己,然后如何你有没有想过要纳秒? – Jesper 2012-03-28 05:32:35

+1

你可以使用System.nanoTime()作为你想要将密钥添加到地图的时间的关键,或者在对象中使用任何其他唯一值,例如ID – 2012-03-28 05:42:56

2

样品日期的精度为,在long格式的表示是在毫秒单元的值。你可以通过乘以1,000,000将其转换为纳秒单位

但是,实际上,它只会将九个零附加到原始日期值,而不会添加任何额外的信息您需要创建哈希值。 A Date对象没有“隐藏的”纳秒精度。


Java提供方法System.nanoTime(),它返回一个以纳秒为单位的时间值。但是我们不能把它包装在一个Date对象中而不会失去精度。不过,它可能有助于创造独特的“时间价值”。

+1

+1:乘以1,000,000会附加六个零。您不能简单地将nanoTime转换为在Date中使用,因为它的时间相对于正常运行时间或某个任意点。由于日期存储很长时间,您不必失去精确度,您就不会有有意义的日期/时间 – 2012-03-28 07:08:24