2012-06-14 133 views
13

我正在存储来自亚马逊云的消息,并按排序映射中的时间戳排序它们。Java日期到毫秒

我解析从下面的代码云时间戳:

Date timestamp = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss.SSS'Z'", Locale.ENGLISH).parse(time); 

,然后我在其中存储的键是日期排序的映射。 问题是日期只能精确到秒。 我可以在1秒内发送几条消息,所以我需要以毫秒级的精度对它们进行排序。有没有一个数据结构允许这个?

+3

向我们展示'time'的值。 – adarshr

+1

你的格式说'SSS'所以millis必须在那 –

+0

如果'time'包含UTC时区('Z'),使用'yyyy-MM-dd'T'hh:mm:ss.SSSZ'而不是'yyyy-MM -dd'T'hh:MM:ss.SSS'Z''。 'Z'将*抓住*'Z'以及例如'+ 0100' –

回答

20

那么只要你的信号源的分辨率高于1秒。看起来像这个模式,但是你没有向我们展示任何输入的例子。

Date只是自1970-01-01以来围绕long毫秒的包装。所以你已经有了。 Date.getTime()将以毫秒级的精度返回。

你为什么认为日期只有一秒精度?在毫秒级别比较Date.compareTo(Date anotherDate)。 所以你的SortedMap应该可以正常工作,除非你正在做一些奇怪的事情。

+0

我以为它不能够,因为我无法获得毫秒或设置它们。但你是对的。感谢那。这个错误来自于我以他们进入的速度消费信息的事实。这意味着时间没有被正确使用。修正它等待350毫秒,然后从队列中消耗。 –

1

我不确定您是否已经完成了这项工作,但是您可以创建自己的比较器并使用它。

作为一个便笺,根据您的应用程序设置,您可能需要注意如何使用SimpleDateFormat,但它有一些问题。