如何用毫秒生成日期
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
。
如果你想显示毫秒值,你可以使用DateFormat
或date.getTime()
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
,而不是 sss
。 sss
打印秒数。
请注意,即使在您不正确的测试中,您也打印了 10 个值。这证明这 10 个日期是不同的。如果它们相同,您将打印一个值。
我测试了这段代码:
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
。
如果你想显示毫秒值,你可以使用DateFormat
或date.getTime()
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
,而不是 sss
。 sss
打印秒数。
请注意,即使在您不正确的测试中,您也打印了 10 个值。这证明这 10 个日期是不同的。如果它们相同,您将打印一个值。