首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Java中将currentTimeMillis转换为日期?

如何在Java中将currentTimeMillis转换为日期?
EN

Stack Overflow用户
提问于 2011-11-23 12:08:16
回答 13查看 360K关注 0票数 163

我在服务器上生成的某些日志文件中有毫秒,我还知道日志文件生成的区域设置,我的问题是将毫秒转换为指定格式的日期。日志的处理发生在位于不同时区的服务器上。当转换为"SimpleDateFormat“程序时,会将机器的日期作为格式化的日期,因为这种格式化的日期不能代表服务器的正确时间。有没有办法优雅地处理这件事?

代码语言:javascript
复制
long yourmilliseconds = 1322018752992l;
        //1322018752992-Nov 22, 2011 9:25:52 PM 

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss,SSS",Locale.US);

GregorianCalendar calendar = new GregorianCalendar(TimeZone.getTimeZone("US/Central"));
calendar.setTimeInMillis(yourmilliseconds);

System.out.println("GregorianCalendar -"+sdf.format(calendar.getTime()));

DateTime jodaTime = new DateTime(yourmilliseconds, 
                    DateTimeZone.forTimeZone(TimeZone.getTimeZone("US/Central")));
DateTimeFormatter parser1 = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss,SSS");

System.out.println("jodaTime "+parser1.print(jodaTime));

输出:

代码语言:javascript
复制
Gregorian Calendar -2011-11-23 08:55:52,992
jodaTime 2011-11-22 21:25:52,992
EN

回答 13

Stack Overflow用户

回答已采纳

发布于 2014-06-12 19:05:43

代码语言:javascript
复制
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(timeStamp);

int mYear = calendar.get(Calendar.YEAR);
int mMonth = calendar.get(Calendar.MONTH);
int mDay = calendar.get(Calendar.DAY_OF_MONTH);
票数 131
EN

Stack Overflow用户

发布于 2011-11-23 12:15:23

您可以使用

类,然后使用

格式化

..。

代码语言:javascript
复制
Date date=new Date(millis);

我们可以使用

java.time

package (教程)-JavaSE8中引入的DateTime API。

代码语言:javascript
复制
var instance = java.time.Instant.ofEpochMilli(millis);
var localDateTime = java.time.LocalDateTime
                        .ofInstant(instance, java.time.ZoneId.of("Asia/Kolkata"));
var zonedDateTime = java.time.ZonedDateTime
                            .ofInstant(instance,java.time.ZoneId.of("Asia/Kolkata"));
代码语言:javascript
复制
var formatter = java.time.format.DateTimeFormatter.ofPattern("u-M-d hh:mm:ss a O");
var string = zonedDateTime.format(formatter);
票数 277
EN

Stack Overflow用户

发布于 2016-04-11 06:27:43

tl;dr

代码语言:javascript
复制
Instant.ofEpochMilli( 1_322_018_752_992L )     // Parse count of milliseconds-since-start-of-1970-UTC into an `Instant`.
       .atZone( ZoneId.of( "Africa/Tunis" ) )  // Assign a time zone to the `Instant` to produce a `ZonedDateTime` object.

详细信息

其他答案使用过时或不正确的类。

避免使用旧的日期-时间类,如java.util.Date/.Calendar。事实证明,它们设计得很差,令人困惑,而且很麻烦。

java.time

The The The

java.time

框架内置于Java 8及更高版本中。大部分功能是

向后移植到Java 6和7

并且进一步

适用于Android

..。是由一些同样的人制作的

Joda-Time

..。

一个

是时间线上的一个时刻

UTC

分辨率为

纳秒

..。Its

纪元

(

https://en.wikipedia.org/wiki/Epoch_(reference_date%29

)是以协调世界时为单位的1970年的第一个时刻。

假设您的输入数据是1970-01-01T00:00:00Z的毫秒计数(在问题中不清楚),那么我们可以很容易地实例化一个

..。

代码语言:javascript
复制
Instant instant = Instant.ofEpochMilli( 1_322_018_752_992L );

instant.toString():2011-11-23T03:25:52.992Z

The The The

在该标准中

ISO 8601

格式化字符串是

和方法

UTC

..。

使用应用时区

正确的时区名称

,来获取一个

..。

代码语言:javascript
复制
ZoneId zoneId = ZoneId.of( "Asia/Kolkata" ) ;
ZonedDateTime zdt = instant.atZone( zoneId );

看看这个

代码在IdeOne.com上实时运行

..。

时区?

我猜你的代码受到印度时区的影响。我们在这里看到,调整到

时区呈现的时间与您报告的时间相同,

比我们的UTC值提前了五个半小时

..。

2011-11-23T08:55:52.992+05:30

亚洲/加尔各答

默认区域

您可以将

当前默认时区

JVM的。请注意,默认值随时都可能更改

在运行时

..。JVM中任何应用程序的任何线程中的任何代码都可以更改当前的默认值。如果很重要,请询问用户所需/预期的时区。

代码语言:javascript
复制
ZoneId zoneId = ZoneId.systemDefault();
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );

关于

java.time

The The The

java.time

框架内置于Java 8及更高版本中。这些班级取代了麻烦的老班级。

遗留

日期-时间类,如

,&

..。

The The The

Joda-Time

项目,现在在

维护模式

,建议迁移到

java.time

类。

要了解更多信息,请参阅

Oracle教程

..。和搜索堆栈溢出,以获得许多示例和解释。规格为

JSR 310

..。

使用

JDBC驱动程序

遵守

JDBC 4.2

或者稍后,您可以交换

java.time

对象直接连接到您的数据库。不需要字符串或java.sql。

*

类。

从哪里获取java.time类?

Java SE 8

Java SE 9

,以及更高版本

内置的。

带有捆绑实现的标准Java API的一部分。

Java9添加了一些次要的特性和修复。

Java SE 6

Java SE 7

中的Java6和7中,很多java.time功能都被反向移植到Java6和7中

ThreeTen-Backport

..。

安卓

(

https://en.wikipedia.org/wiki/Android_(operating_system%29

)

更高版本的Android捆绑实现的java.time类。

对于早期的Android,

ThreeTenABP

项目适应

ThreeTen-Backport

(如上所述)。请参见

如何使用ThreeTenABP…

..。

The The The

ThreeTen-Extra

project通过附加的类扩展了java.time。这个项目是未来可能添加到java.time的试验场。您可能会在这里找到一些有用的类,例如

,以及

更多

..。

票数 26
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8237193

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档