我测试了这段代码:
java.util.Date d=new java.util.Date();
System.out.println("date="+d);
输出结果为:
Sat May 09 02:48:42 CDT 2015
它没有毫秒......
p.s让我们说如果Date
使用ConcurrentLinkedHashMap<Date,String>
(wiki link)我可以看到最小日期值是第二:(
编辑:
public class HashMapTest0 {
private ConcurrentMap<Date,Date> values=new ConcurrentLinkedHashMap.Builder<Date, Date>()
.maximumWeightedCapacity(1000)
.build();
public static void main(String [] args){new HashMapTest0();}
HashMapTest0(){
for(int i=0; i<10; i++){
Date d=new Date();
values.put(d, d);
try {
Thread.sleep(10);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
for(Date d:values.values()){
String s=new SimpleDateFormat("dd-MM-yyyy:HH:mm:ss.sss").format(d)
.replaceAll("-", "_")
.replaceAll(":", "_");
System.out.println(s);
}
}
}
输出可能是这样的:
09_05_2015_04_07_10.010
09_05_2015_04_07_10.010
09_05_2015_04_07_10.010
09_05_2015_04_07_10.010
09_05_2015_04_07_10.010
09_05_2015_04_07_10.010
09_05_2015_04_07_10.010
09_05_2015_04_07_10.010
09_05_2015_04_07_10.010
09_05_2015_04_07_10.010
所以我的问题是如何用实时毫秒生成日期,还是有更优化的方法?
答案 0 :(得分:2)
SSS
你永远不会在这里打印毫秒。阅读javadoc of SimpleDateFormat或您已经获得的答案。毫秒的模式为sss
,而不是sss
。 TabControl
打印秒。
请注意,即使在不正确的测试中,您也会打印10个值。这证明了10个日期不同。如果它们相同,则打印一个值。
答案 1 :(得分:1)
Date
对象在内部使用毫秒,但是当您显示它时,您正在调用toString()
,将其转换为您看到的格式。
如果您只担心Comparable
,那很好,如果您直接比较Date
个对象,则比较将在毫秒级完成。
HashMap
将使用Date
对象的equals()方法来比较密钥,这会进行一毫秒的比较:
当且仅当参数不为null并且是一个Date对象,表示与此对象相同的时间点(以毫秒为单位)时,结果为真。
如果您希望Map
按键排序,请使用SortedMap
。
如果您想显示毫秒值,可以使用DateFormat
或date.getTime()
答案 2 :(得分:0)
试试这个:编辑
SimpleDateFormat sdf = new SimpleDateFormat(" E MMM dd hh:mm:ss.SSS yyyy");
System.out.println(sdf.format(new Date()));
输出:
Sat May 09 01:59:02.718 2015
答案 3 :(得分:0)
在java8中执行此操作的方法是Instant表示具有纳秒精度的时间点(类似于java.util.Date)(与具有毫秒精度的旧Date不同)。使用纳秒精度表示时间点需要比Long可以提供的空间更多的空间,因此内部表示由两个Long字段组成,第一个包含标准Java纪元以来(或之前)的秒数,另一个包含最后一秒的纳秒(所以从不大于999,999,999)。
/ **获取当前时间* / 即时瞬间= Instant.now();
/ **输出格式为ISO-8601 * / 的System.out.println(即时);
答案 4 :(得分:-2)
JDateTime jdt = new JDateTime(System.currentTimeMillis());
//result is 2015-05-09 16:23:25.344
你可以使用jdt.getMillisecond()
来获得毫秒。