如何用毫秒生成日期

How to generate date with milliseconds

我测试了这段代码:

java.util.Date d=new java.util.Date();
System.out.println("date="+d);

输出为:

Sat May 09 02:48:42 CDT 2015

它没有毫秒...

p.s 让我们说是否对 ConcurrentLinkedHashMap<Date,String> 使用 Date (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

所以我的问题是如何生成具有实时毫秒数的日期,或者有更优化的方法吗?

试试这个:编辑

 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

Date 对象在内部使用毫秒,但是当您显示它时,您调用它的 toString() 将其转换为您看到的格式。

如果你只担心Comparable,没关系,如果你直接比较Date个对象,比较会以毫秒为单位进行。

A HashMap 将使用 Date 对象的 equals() 方法来比较键,进行毫秒比较:

The result is true if and only if the argument is not null and is a Date object that represents the same point in time, to the millisecond, as this object.

如果您想要一个 Map 来按键排序条目,请使用 SortedMap

如果你想显示毫秒值,你可以使用DateFormatdate.getTime()

使用JDateTime

JDateTime jdt = new JDateTime(System.currentTimeMillis());
//result is 2015-05-09 16:23:25.344

你可以用jdt.getMillisecond()得到毫秒。

java8 中的实现方式是用一个 Instant 表示一个时间点(类似于 java.util.Date),精度为纳秒(不同于旧的 Date,精度为毫秒)。使用纳秒精度表示时间点需要比 Long 所能提供的更多 space,因此内部表示由两个 Long 字段组成,第一个包含自标准 [=21= 以来(或之前)的秒数] 纪元,另一个是最后几秒的纳秒数(因此永远不会大于 999,999,999)。

/**获取当前时间*/ 瞬间瞬间=Instant.now();

/** 输出格式为 ISO-8601*/ System.out.println(即时);


new SimpleDateFormat("dd-MM-yyyy:HH:mm:ss.sss")

你永远不会在这里打印毫秒数。阅读 javadoc of SimpleDateFormat,或者你已经得到的答案。毫秒的模式是 SSS,而不是 ssssss 打印秒数。

请注意,即使在您不正确的测试中,您也打印了 10 个值。这证明这 10 个日期是不同的。如果它们相同,您将打印一个值。