下面的代码给出了当前时间 . 但它没有告诉任何关于毫秒的事情 .
public static String getCurrentTimeStamp() {
SimpleDateFormat sdfDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//dd/MM/yyyy
Date now = new Date();
String strDate = sdfDate.format(now);
return strDate;
}
我以 2009-09-22 16:47:08
(YYYY-MM-DD HH:MI:Sec) 格式获取日期 .
但我想以 2009-09-22 16:47:08.128
((YYYY-MM-DD HH:MI:Sec.Ms)格式检索当前时间 - 其中128表示毫秒 .
SimpleTextFormat
会正常工作 . 这里最低的时间单位是秒,但我怎么得到毫秒?
11 回答
您可以简单地以您想要的格式获取它 .
Java 8中的doc将其命名为fraction-of-second,而在Java 6中将其命名为millisecond . 这让我感到困惑
最简单的方法是(在Java 8之前)使用,
但SimpleDateFormat不是线程安全的 . 既不是java.util.Date . 这将导致为用户带来潜在的并发问题 . 这些现有设计存在许多问题 . 为了在Java 8中克服这些问题,我们有一个名为java.time的独立包 . 这份Java SE 8 Date and Time文件对此有一个很好的概述 .
所以在Java 8中,类似下面的内容将起到作用(格式化当前日期/时间),
有一点需要注意的是它是在受欢迎的第三方库joda-time的帮助下开发的,
但现在
joda-time
已被弃用,并要求用户迁移到新的java.time
.不管怎么说,
如果您有一个Calendar实例,可以使用下面的代码将其转换为新的
java.time
,如果你有一个Date对象,
如果你刚刚有了纪元毫秒,
使用此选项以指定的格式获取 current time :
Java one liner
在JDK8风格
试试这个:-
http://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html
要么
tl;博士
java.time
在Java 8及更高版本中,我们在Java 8及更高版本中内置了java.time框架 . 这些新类取代了麻烦的旧java.util.Date/.Calendar类 . 新课程的灵感来自非常成功的Joda-Time框架,旨在作为其继承者,在概念上类似但重新设计 . 由JSR 310定义 . 由ThreeTen-Extra项目扩展 . 见Tutorial .
要知道,java.time能够nanosecond分辨率(在第二部分9位小数)的,对双方java.util.Date和乔达 - 时间的millisecond分辨率(3位小数) . 因此,当格式化只显示3个小数位时,您可能隐藏数据 .
如果要从数据中消除任何微秒或纳秒,请截断 .
解析/生成字符串时,java.time类在默认情况下使用ISO 8601格式 . 最后
Z
是Zulu
的缩写,意思是UTC .Instant代表UTC时间轴上的一个时刻,分辨率最高为nanoseconds . Java 8中的Capturing the current moment仅限于milliseconds,Java 9中的新实现可捕获长达纳秒的时间,具体取决于计算机的硬件时钟能力 .
用空格替换中间的
T
,用什么都用Z
替换,以获得所需的输出 .由于您不关心包含偏移量或时区,因此请将“本地”日期时间与任何特定位置无关 .
Joda-Time
非常成功的Joda-Time库是java.time框架的灵感来源 . 建议在方便时迁移到java.time .
ISO 8601格式包括毫秒,是Joda-Time 2.4库的默认格式 .
跑的时候......
此外,如果需要,您可以要求毫秒级的秒数作为数字:
为了补充上述答案,这里是一个打印当前时间和日期(包括毫秒)的程序的一个小工作示例 .
我会用这样的东西:
变量
dateTime
可以是任何日期和/或时间值,请参阅JavaDoc for Formatter .您只需在日期格式字符串中添加毫秒字段:
API doc of SimpleDateFormat详细描述了格式字符串 .