6

yyyy-MM-dd HH:mm:ss,SSS以毫秒为单位获取时间的简单方法吗?我从new Date()or中找到了一些如何执行此操作的信息Calendar.getInstance(),但找不到是否可以从 long 中完成(例如1344855183166

4

6 回答 6

10

我以为你问过如何以这种格式获取时间“yyyy-MM-dd HH:mm:ss,SSS”

一种方法是使用 java 的 SimpleDateFormat: http ://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html

请注意,这不是线程安全的。

...

Date d = new Date(1344855183166L);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss,SSS");
String dateStr = sdf.format(d);

...

于 2012-08-13T12:46:05.290 回答
5

如果你有纪元毫秒。下面的行应该工作,

Instant.ofEpochMilli(millis).toString()
于 2019-10-18T18:14:10.407 回答
4

正如 Sridhar Sg 的代码所说:

Instant.ofEpochMilli(millis).toString()

将起作用,因为该toString()方法将为您提供 ISO-8601 扩展格式表示(带分隔符)。

请注意,除非您使用ThreeTen Backport(Java 6 和 7 的反向移植),否则Instant该类仅适用于 JDK 8(包的介绍)。java.time

如果millis = 1603101879234,上述方法将返回:2020-10-19T10:04:39.234Z

如果您需要其他类型的格式,例如 ISO-8601 基本格式(除了中间的 T 之外没有分隔符),您可以使用DateTimeFormatter如下自定义:

Instant instant = Instant.ofEpochMilli(millis);
DateTimeFormatter outFormatter = DateTimeFormatter
        .ofPattern("yyyyMMdd'T'HHmmss.SSSX") // millisecond precision
        .withZone(ZoneId.of("UTC"));

String basicIso = outFormatter.format(instant);

对于相同的millis = 1603101879234,上述方法将产生:20201019T100439.234Z

于 2020-10-19T10:13:03.693 回答
3

构造Date函数确实需要很长时间(毫秒)不是吗?

问候,

于 2012-08-13T11:15:58.150 回答
3

该问题未提及时区,因此我假设您的意思是UTC / GMT。这个问题没有解释“ISO格式”,所以我假设你的意思是ISO 8601。这恰好是第三方Joda-Time 2.3 库的默认设置。这线程安全的。

// © 2013 Basil Bourque. This source code may be used freely forever by anyone taking full responsibility for doing so.

System.out.println( "That moment: " + new org.joda.time.DateTime( 1344855183166L, org.joda.time.DateTimeZone.UTC ) );

运行时……</p>

That moment: 2012-08-13T10:53:03.166Z

如果原始海报的意思是波兰时区……</p>

// © 2013 Basil Bourque. This source code may be used freely forever by anyone taking full responsibility for doing so.

// Time Zone list… http://joda-time.sourceforge.net/timezones.html
org.joda.time.DateTimeZone warsawTimeZone = org.joda.time.DateTimeZone.forID( "Europe/Warsaw" );
System.out.println( "That moment in Poland: " + new org.joda.time.DateTime( 1344855183166L, warsawTimeZone ) );

运行时……</p>

That moment in Poland: 2012-08-13T12:53:03.166+02:00
于 2013-11-27T23:49:48.527 回答
2

使用new Date(millis);构造函数Date

new Date(1344855183166L);
于 2012-08-13T11:12:14.797 回答