2015-05-09 48 views
-2

如何生成我测试此代码日期毫秒

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

输出是:

周六05月09日2点48分42秒CDT 2015年

它没有毫秒...

ps可以说如果使用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

'DateFormatter'? –

+0

我不喜欢DateFormatter返回字符串:(我想要有可比较的接口支持 – user390525

+0

这就是你使用'日期'等。Java 8有'java.time' API。 –

回答

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

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

注意,甚至在你不正确的测试,你有10个值进行打印。这就是10个日期不同的证明。如果他们是一样的,你会有一个单一的值打印。

+0

这是正确的,但我需要独特的字符串;而且,是的,我想你是正确的我需要大写.SSS毫秒我刚刚尝试;你能给出一个关于“”.replaceAll(“。”,“_”)的提示吗?我尝试了代码来替换点,但这会导致奇怪的结果;那么如何正确地替换mls分隔符点? – user390525

+0

使用replace(),而不是replaceAll()。 replaceAll()以正则表达式作为参数。这里有一个模式:所有的问题都可以通过阅读文档来回答。 –

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 
1

Date对象使用毫秒内,但是当你显示出来,你调用它的toString()这将其转换到你看到的格式。

如果您只是担心Comparable,那很好,如果您直接比较Date对象,则会在毫秒基础上进行比较。

一个HashMap将使用Date对象的equals()方法对键进行比较,这确实一个毫秒比较:

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

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

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

+1

请注意,hashCode()用于毫秒的事实是无关紧要的。如果需要的话,hashCode()总是可以返回0:这会让地图变慢。最后,map使用equals()来比较两个日期,而equals()认为两个日期相等,如果它们具有相同的时间,以毫秒为单位。 –

+0

@JBNizet好点,固定 – CupawnTae

-2

使用JDateTime

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

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

0

在java8中执行此操作的方法是Instant以纳秒精度(与具有毫秒精度的旧Date不同)表示一个时间点(类似于java.util.Date)。表示使用毫微秒的精度的时间点需要更多的空间比一个长可以提供,因此内部表示由两个长的字段,所述第一保持的秒自(或之前)的标准的Java时期的数量和另一方的数量最后几秒的纳秒(因此从不大于999,999,999)。

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

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