您好我正在编写以下代码:
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位?
由于
答案 0 :(得分:16)
使用以下内容:
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss_SSS");
String dateString = formatter.format(new java.util.Date());
答案 1 :(得分:2)
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 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和& SimpleDateFormat
现在位于Joda-Time的maintenance mode项目建议迁移到java.time类。
要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310。
您可以直接与数据库交换 java.time 对象。使用符合JDBC driver或更高版本的JDBC 4.2。不需要字符串,不需要java.sql.*
类。
从哪里获取java.time类?
答案 2 :(得分:0)
尝试使用与SimpleDateFormat