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

Kei*_*ith 9 java time android date

嗨,我正在编写以下代码:

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

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

它给我的是:

2011-09-01_09-55-03-SSS
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢

Ido*_*lon 17

使用以下内容:

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

  • 请注意,我已将“hh”更改为“HH”,以 24 小时格式显示小时。如果需要 12 小时格式,请使用“hh” (2认同)

Bas*_*que 5

太长了;博士

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

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

\n
\n\n

Instant

\n\n

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

\n\n

如果您想要 UTC 格式的日期时间,请使用该类Instant。该类具有纳秒级的分辨率,足以满足毫秒级的分辨率。

\n\n
Instant instant = Instant.now();\nString output = instant.toString();\n
Run Code Online (Sandbox Code Playgroud)\n\n

toString方法使用DateTimeFormatter.ISO_INSTANT格式化程序,以小数形式打印 0、3、6 或 9 位数字,根据需要打印适合实际数据值的数量。

\n\n

在 Java 8 中,当前时刻最多只能捕获毫秒,但 Java 9 中的新实现Clock可能会捕获最多纳秒。因此,如果您有要求,请截断为毫秒。TemporalUnit按照 中的实现,通过 a 指定所需的截断ChronoUnit.MILLIS

\n\n
Instant instant = Instant.now().truncatedTo( ChronoUnit.MILLIS );\n
Run Code Online (Sandbox Code Playgroud)\n\n

ZonedDateTime

\n\n

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

\n\n
Instant instant = Instant.now();\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n

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

\n
\n\n
Instant instantTruncated = instant.truncatedTo( ChronoUnit.MILLIS );\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n

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

\n
\n\n
ZoneId zoneId = ZoneId.of( "America/Montreal" );\nZonedDateTime zdt = instant.atZone( zoneId );\nString output = zdt.toString();\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n

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

\n
\n\n

同样,如果您需要其他格式,请在 Stack Overflow 中搜索DateTimeFormatter.

\n\n

DateTimeFormatter

\n\n

如果您想强制使用三位数字表示毫秒,即使该值全为零,也可以使用DateTimeFormatterclass 指定自定义格式模式。

\n\n
DateTimeFormatter f = DateTimeFormatter.ofPattern( "uuuu-MM-dd_HH-mm-ss-SSS" ) ;\nString output = zdt.format( f ) ;\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n

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

\n
\n\n
\n\n

关于java.time

\n\n

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

\n\n

Joda -Time项目现在处于维护模式,建议迁移到java.time类。

\n\n

要了解更多信息,请参阅Oracle 教程。并在 Stack Overflow 上搜索许多示例和解释。规格为JSR 310

\n\n

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

\n\n

从哪里获取 java.time 类?

\n\n\n