如何获得当前时间在YYYY-MM-DD HH: MI: Sec. Millis的格式在Java?

下面的代码给出了当前时间。但它没有告诉任何关于毫秒的信息。

public static String getCurrentTimeStamp() {SimpleDateFormat sdfDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//dd/MM/yyyyDate now = new Date();String strDate = sdfDate.format(now);return strDate;}

我有一个格式为YYYY-MM-DD HH:MM:SS2009-09-22 16:47:08)的日期。

但是我想以格式YYYY-MM-DD HH:MM:SS.MS2009-09-22 16:47:08.128,其中128是毫秒)检索当前时间。

SimpleTextFormat将正常工作。这里的最低时间单位是秒,但我如何获得毫秒呢?

1482171 次浏览

您只需在日期格式字符串中添加毫秒字段:

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

SimpleDateFormat的API文档详细描述了格式字符串。

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");

试试这个:-

http://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html

DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss.SSS");Date date = new Date();System.out.println(dateFormat.format(date));

DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");Calendar cal = Calendar.getInstance();System.out.println(dateFormat.format(cal.getTime()));

tl; dr

Instant.now().toString()

2016-05-06 T 23:24:25.694 Z

ZonedDateTime.now(ZoneId.of( "America/Montreal" )).format(  DateTimeFormatter.ISO_LOCAL_DATE_TIME ).replace( "T" , " " )

2016-05-06 19:24:25.694

java.time

在Java8及更高版本中,我们将java.time框架内置到Java8及更高版本中。这些新类取代了麻烦的旧java.util.日期/.日历类。新类的灵感来自非常成功的Joda-Time框架,该框架旨在作为其继任者,概念相似但重新架构。由JSR 310定义。由额外三个项目扩展。参见教程

请注意,java.time的分辨率为纳秒(小数点后9位),而java.util.和Joda-Time的分辨率为毫秒(小数点后3位)。因此,当格式化为仅显示小数点后3位时,您可能会隐藏数据。

如果要从数据中消除任何微秒或纳秒,请截断。

Instant instant2 = instant.truncatedTo( ChronoUnit.MILLIS ) ;

java.time类在解析/生成字符串时默认使用ISO8601格式。结尾的ZZulu的缩写,表示UTC

Instant表示UTC时间线上的一个时刻,分辨率最高可达纳秒。Java8中的捕捉当下的瞬间被限制为毫秒,Java9中的新实现根据计算机硬件时钟的能力捕获高达纳秒的时间。

Instant instant = Instant.now (); // Current date-time in UTC.String output = instant.toString ();

2016-05-06 T 23:24:25.694 Z

将中间的T替换为空格,将Z替换为空,以获得所需的输出。

String output = instant.toString ().replace ( "T" , " " ).replace( "Z" , "" ; // Replace 'T', delete 'Z'. I recommend leaving the `Z` or any other such [offset-from-UTC][7] or [time zone][7] indicator to make the meaning clear, but your choice of course.

2016-05-06 23:24:25.694

由于您不关心包含偏移量或时区,因此创建一个与任何特定位置无关的“本地”日期时间。

String output = LocalDateTime.now ( ).toString ().replace ( "T", " " );

Joda-Time

非常成功的Joda-Time库是java.time框架的灵感来源。建议在方便的时候迁移到java.time。

ISO8601格式包括毫秒,是Joda-Time 2.4库的默认格式。

System.out.println( "Now: " + new DateTime ( DateTimeZone.UTC ) );

当运行…

Now: 2013-11-26T20:25:12.014Z

此外,如果需要,您可以要求将毫秒分数作为数字:

int millisOfSecond = myDateTime.getMillisOfSecond ();

Java一条线

public String getCurrentTimeStamp() {return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date());}

在JDK8风格

public String getCurrentLocalDateTimeStamp() {return LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS"));}

为了补充上述答案,这里有一个打印当前时间和日期(包括毫秒)的程序的小工作示例。

import java.text.SimpleDateFormat;import java.util.Date;
public class test {public static void main(String argv[]){SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");Date now = new Date();String strDate = sdf.format(now);System.out.println(strDate);}}

您可以简单地以您想要的格式获取它。

String date = String.valueOf(android.text.format.DateFormat.format("dd-MM-yyyy", new java.util.Date()));

我会用这样的东西:

String.format("%tF %<tT.%<tL", dateTime);

变量dateTime可以是任何日期和/或时间值,请参阅JavaDoc#1

最简单的方法是(在Java8之前)使用,

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");

但是SimpleDateFormat简单日期格式不是线程安全的。java.util.日期也不是。这将导致用户潜在的并发问题。并且这些现有设计中存在许多问题。为了在Java8中克服这些问题,我们有一个名为java.time的单独包。这个JavaSE 8日期和时间文档对此有很好的概述。

因此,在Java8中,下面的内容将起到作用(格式化当前日期/时间),

LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS"));

需要注意的是,它是在流行的第三方库joda-time的帮助下开发的,

该项目由JSR 310下的Joda-Time和Oracle的作者共同领导,并将出现在新的JavaSE 8包中java.time.

但现在joda-time已被弃用,并要求用户迁移到新的java.time

请注意,从JavaSE 8开始,用户被要求迁移到java.time(JSR-310)-这是取代该项目的JDK的核心部分

不管怎么说,

如果您有日历实例,您可以在下面使用它将其转换为新的java.time

    Calendar calendar = Calendar.getInstance();long longValue = calendar.getTimeInMillis();
LocalDateTime date =LocalDateTime.ofInstant(Instant.ofEpochMilli(longValue), ZoneId.systemDefault());String formattedString = date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS"));
System.out.println(date.toString()); // 2018-03-06T15:56:53.634System.out.println(formattedString); // 2018-03-06 15:56:53.634

如果你有一个Date对象,

    Date date = new Date();long longValue2 = date.getTime();
LocalDateTime dateTime =LocalDateTime.ofInstant(Instant.ofEpochMilli(longValue2), ZoneId.systemDefault());String formattedString = dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS"));
System.out.println(dateTime.toString()); // 2018-03-06T15:59:30.278System.out.println(formattedString);     // 2018-03-06 15:59:30.278

如果你只有纪元毫秒,

LocalDateTime date =LocalDateTime.ofInstant(Instant.ofEpochMilli(epochLongValue), ZoneId.systemDefault());

8Java的文档将其命名为秒分数,而Java的文档将其命名为毫秒。这使我感到困惑

使用它来获取指定格式的当前时间

 DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");System.out.print(dateFormat.format(System.currentTimeMillis()));  }

我没有看到这样的引用:

SimpleDateFormat f = new SimpleDateFormat("yyyyMMddHHmmssSSS");

上述格式也很有用。

http://www.java2s.com/Tutorials/Java/Date/Date_Format/Format_date_in_yyyyMMddHHmmssSSS_format_in_Java.htm

回复:

DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS");ZonedDateTime start = Instant.now().atZone(ZoneId.systemDefault());String startTimestamp = start.format(dateFormatter);

我这里有一个简单的例子,用毫秒显示日期和时间……

import java.time.LocalDateTime;import java.time.format.DateTimeFormatter;
public class MyClass{
public static void main(String[]args){LocalDateTime myObj = LocalDateTime.now();DateTimeFormatter myFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS");String forDate = myObj.format(myFormat);System.out.println("The Date and Time are: " + forDate);}}

java.text(Java 8之前)

public static ThreadLocal<DateFormat> dateFormat = new ThreadLocal<DateFormat>() {protected DateFormat initialValue() {return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");};};
...dateFormat.get().format(new Date());

java.time

public static DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS");
...dateTimeFormatter.format(LocalDateTime.now());