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

发布于 2024-12-02 09:49:09 字数 313 浏览 2 评论 0 原文

您好,我正在编码以下内容:

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 位置获取毫秒?

谢谢

Hi I am coding the following:

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

I want the current date and time and milliseconds

what it gives me is:

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

The SSS is not converting back to milliseconds...

Does anyone know why and what should it be to get the milliseconds in 3 position?

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

一世旳自豪 2024-12-09 09:49:09

使用以下内容:

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

Use the following:

SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss_SSS");
String dateString = formatter.format(new java.util.Date());
删除→记忆 2024-12-09 09:49:09

太长了;博士

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.now();
String output = instant.toString();

toString 方法使用 DateTimeFormatter.ISO_INSTANT 格式化程序,打印小数部分中的 0、3、6 或 9 位数字,根据实际数据值的需要多少位。

在 Java 8 中,当前时刻仅捕获到毫秒,但 时钟最多可以捕获 纳秒。因此,如果您有要求,请截断为毫秒。通过 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[美国/蒙特利尔]

同样,如果您需要其他格式,请在 Stack Overflow 中搜索 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 及更高版本中。这些类取代了麻烦的旧遗留日期时间类,例如java.util.Date, 日历, & ; SimpleDateFormat

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

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

您可以直接与数据库交换java.time对象。使用符合 JDBC 驱动程序 /jeps/170" rel="nofollow noreferrer">JDBC 4.2 或更高版本。不需要字符串,不需要 java.sql.* 类。

从哪里获取 java.time 类?

tl;dr

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

You are using troublesome old legacy date-time classes. Instead use the java.time classes.

If you want the date-time in UTC, use the Instant class. This class holds nanosecond resolution, more than enough for milliseconds.

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

That toString method uses the DateTimeFormatter.ISO_INSTANT formatter which prints 0, 3, 6, or 9 digits in the decimal fraction, as many as needed appropriate to the actual data value.

In Java 8 the current moment is captured only up to milliseconds but a new implementation of Clock in Java 9 may capture up to nanoseconds. So truncate to milliseconds if that is your requirement. Specify your desired truncation by a TemporalUnit as implemented in ChronoUnit.MILLIS.

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

ZonedDateTime

If you want a specify time zone, apply a ZoneId to get a 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[America/Montreal]

Again if you want other formats, search Stack Overflow for DateTimeFormatter.

DateTimeFormatter

If you want to force three digits for milliseconds, even if the value is all zeros, specify a custom formatting pattern using DateTimeFormatter class.

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

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


About java.time

The java.time framework is built into Java 8 and later. These classes supplant the troublesome old legacy date-time classes such as java.util.Date, Calendar, & SimpleDateFormat.

The Joda-Time project, now in maintenance mode, advises migration to the java.time classes.

To learn more, see the Oracle Tutorial. And search Stack Overflow for many examples and explanations. Specification is JSR 310.

You may exchange java.time objects directly with your database. Use a JDBC driver compliant with JDBC 4.2 or later. No need for strings, no need for java.sql.* classes.

Where to obtain the java.time classes?

倒数 2024-12-09 09:49:09

尝试使用与 SimpleDateFormat 相同的格式

Try using the same format with SimpleDateFormat

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文