如何用毫秒生成日期

时间:2015-05-09 08:07:53

标签: java java-7 java.util.date

我测试了这段代码:

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

所以我的问题是如何用实时毫秒生成日期,还是有更优化的方法?

5 个答案:

答案 0 :(得分:2)

SSS

你永远不会在这里打印毫秒。阅读javadoc of SimpleDateFormat或您已经获得的答案。毫秒的模式为sss,而不是sssTabControl打印秒。

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

答案 1 :(得分:1)

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

如果您只担心Comparable,那很好,如果您直接比较Date个对象,则比较将在毫秒级完成。

HashMap将使用Date对象的equals()方法来比较密钥,这会进行一毫秒的比较:

  

当且仅当参数不为null并且是一个Date对象,表示与此对象相同的时间点(以毫秒为单位)时,结果为真。

如果您希望Map按键排序,请使用SortedMap

如果您想显示毫秒值,可以使用DateFormatdate.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

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

你可以使用jdt.getMillisecond()来获得毫秒。