如何在格式化的日期字符串中包含毫秒?

时间:2011-09-01 17:15:39

标签: java android date time

您好我正在编写以下代码:

String sph=(String) android.text.format.DateFormat.format("yyyy-MM-dd_hh-mm-ss_SSS", new java.util.Date()); 

我想要当前的日期和时间以及毫秒

它给我的是:

2011-09-01_09-55-03-SSS

SSS没有转换回毫秒......

有没有人知道为什么以及如何将毫秒数放在3位?

由于

3 个答案:

答案 0 :(得分:16)

使用以下内容:

SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss_SSS");
String dateString = formatter.format(new java.util.Date());

答案 1 :(得分:2)

TL;博士

ZonedDateTime          // Represent a moment in the wall-clock time used by the people of a certain region (a time zone).
.now()                 // Capture current moment. Better to pass optional argument for `ZoneId` (time zone). Returns a `ZonedDateTime` object.
.format(               // Generate a `String` with text in a custom formatting pattern.
    DateTimeFormatter.ofPattern( "uuuu-MM-dd_HH-mm-ss-SSS" )
)                      // Returns a `String` object.
  

2018-08-26_15-43-24-895

Instant

您正在使用麻烦的旧旧日期时间类。而是使用java.time类。

如果您想要UTC格式的日期时间,请使用Instant课程。这个类具有纳秒分辨率,足够毫秒。

Instant instant = Instant.now();
String output = instant.toString();

toString方法使用DateTimeFormatter.ISO_INSTANT格式化程序,它在小数部分中打印0,3,6或9位数,并根据实际数据值的需要进行多次操作。

在Java 8中,当前时刻仅被捕获到毫秒,但Java 9中Clock的新实现可能最多捕获nanoseconds。如果这是您的要求,则截断为毫秒。按TemporalUnit中实现的ChronoUnit.MILLIS指定所需的截断。

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

ZonedDateTime

如果您想要指定时区,请应用ZoneId获取ZonedDateTime

Instant instant = Instant.now();
  

instant.toString():2018-08-26T19:43:24.895621Z

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

instantTruncated.toString():2018-08-26T19:43:24.895Z

ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = instant.atZone( zoneId );
String output = zdt.toString();
  

2018-08-26T15:43:24.895621-04:00 [美国/蒙特利尔]

如果您想要其他格式,请再次搜索DateTimeFormatter的堆栈溢出。

DateTimeFormatter

如果要强制三位数(毫秒),即使该值全为零,请使用DateTimeFormatter类指定自定义格式设置模式。

DateTimeFormatter f = DateTimeFormatter.ofPattern( "uuuu-MM-dd_HH-mm-ss-SSS" ) ;
String output = zdt.format( f ) ;
  

2018-08-26_15-43-24-895

关于 java.time

java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendar和& SimpleDateFormat

现在位于Joda-Timemaintenance mode项目建议迁移到java.time类。

要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310

您可以直接与数据库交换 java.time 对象。使用符合JDBC driver或更高版本的JDBC 4.2。不需要字符串,不需要java.sql.*类。

从哪里获取java.time类?

答案 2 :(得分:0)

尝试使用与SimpleDateFormat

相同的格式