最简单的方法是(在Java 8之前)使用,
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
这将导致用户潜在的并发问题。 在这些现有设计中存在许多问题。 为了在Java 8中克服这些问题,我们有一个单独的包java.time 。
因此,在Java 8中,以下方法可以解决问题(格式化当前日期/时间),
LocalDateTime.now()
.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS"));
要注意的一件事是,它是在受欢迎的第三方图书馆joda-time的帮助下开发的,
该项目由Joda-Time(Stephen Colebourne)的作者和Oracle在JSR 310下共同领导,并将出现在新的Java SE 8包java.time中。
但是现在不赞成使用joda-time并要求用户迁移到新的java.time 。
请注意,从Java SE 8开始,要求用户迁移到java.time(JSR-310)-JDK的核心部分,该项目取代了此项目。
无论如何,
如果您有Calendar实例,则可以在下面使用它来将其转换为新的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.634
System.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.278
System.out.println(formattedString); // 2018-03-06 15:59:30.278
如果只有纪元毫秒,
LocalDateTime date =
LocalDateTime.ofInstant(Instant.ofEpochMilli(epochLongValue), ZoneId.systemDefault());