在Android中将Epoch时间转换为日期和日期转换为Epoch时间

10

StrDate = "2011-07-19T18:23:20+0000";

我如何在Android中获取上述日期格式的纪元时间?

还想知道如何将纪元时间转换为上述日期格式。

希望您能给出一个带有示例的直接答案。

3个回答

15
使用Joda-Time 2.3的示例代码。
Unix时间是UTC / GMT中自1970年以来的秒数。
“如何在Android中获取上述日期格式的纪元时间?”
DateTime dateTimeInUtc = new DateTime( "2011-07-19T18:23:20+0000", DateTimeZone.UTC );
long secondsSinceUnixEpoch = ( dateTimeInUtc.getMillis() / 1000 ); // Convert milliseconds to seconds.

"...和..."
“如何将一个纪元时间转换为上述日期格式。”
String dateTimeAsString = new DateTime( secondsSinceUnixEpoch * 1000, DateTimeZone.UTC ).toString();

将这些值转储到控制台...
System.out.println( "dateTimeInUtc: " + dateTimeInUtc );
System.out.println( "secondsSinceUnixEpoch: " + secondsSinceUnixEpoch );
System.out.println( "dateTimeAsString: " + dateTimeAsString );

奖励:适应另一个时区。
DateTime dateTimeMontréal = dateTimeInUtc.withZone( DateTimeZone.forID( "America/Montreal" ) );

7

您应该使用SimpleDateFormat。该类支持格式化和解析。

示例代码:

SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ssZZZZ");
Date gmt = formatter.parse("2011-07-19T18:23:20+0000");
long millisecondsSinceEpoch0 = gmt.getTime();
String asString = formatter.format(gmt);

请注意,Java中的Date实例始终表示自历元0以来的毫秒数,在UTC / GMT中,但在打印时会以本地时间打印。

我无法访问日期对象的毫秒值。你试图给我日期格式,但我正在寻找纪元时间值,我会很感激一个直接的答案,例如,long epochtime = blahblah(); 是否有一个直接的函数来获取那个纪元时间。 - Ramji
什么是时代时间?您获得的“Date”对象表示自时代0以来的毫秒数。我更新了我的回复,以展示如何获取毫秒数。该代码显示如何从字符串转换为日期,以及从日期转换为字符串。 - Kaj
1
dateobj.getTime() 可以获取自 1970 年 1 月 31 日 GMT 起的毫秒数。当我使用 simpledateformatter 解析日期并将其转换为字符串时,它会自动显示当前时区。现在我想知道,如果我的时区发生变化,gettime() 是否会返回正确的 Epoch 时间。 - Ramji
2
正如我所说,getTime() 返回的毫秒数始终始终始终是 GMT 中的毫秒数。toString() 将始终以本地时间打印时间,但这只是一个纯粹的表示问题。日期只是 GMT 中的毫秒数的包装器。 - Kaj

3

虽然有些晚,但Joda-Time可以简单干净地处理这两个问题。

使用Joda-Time

1.将纪元时间转换为日期

其中日期是您的纪元时间

DateTime dateTime = new DateTime(date*1000L);
System.out.println("Datetime ..." + dateTime);

Datetime from Epoch ...2014-08-01T13:00:00.000-04:00

2.日期转换为纪元时间

 DateTime fromDate = new DateTime("2011-07-19T18:23:20+0000");
 long epochTime =  fromDate.getMillis();
 System.out.println("Date is.." + fromDate + " epoch of date " + epochTime);

 Date is..2011-07-19T14:23:20.000-04:00 epoch of date 1311099800000

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接