我正在使用已编码的JSON文件进行Android项目。
所以我有这个:
{
"type": "Feature",
"properties": {
"mag": 1.29,
"place": "10km SSW of Idyllwild, CA",
"time": 1388620296020,
"updated": 1457728844428
}
}
我想在年,日,小时和秒中转换
time
。我知道有很多话题谈论我的问题,但是我已经尝试过了,但没有成功。
最佳答案
在Android中,您可以将ThreeTen Backport(与Java 8的新日期/时间类很好的反向移植)与ThreeTenABP一起使用(有关如何使用here的更多信息)。
该API提供了一种处理日期的好方法,比过时的Date
和Calendar
(旧类(Date
,Calendar
和SimpleDateFormat
)具有lots of problems,并且已被替换)要好得多。通过新的API)。
要从时间戳记值获取日期(假设1388620296020
是unix纪元以来的毫秒数),可以使用org.threeten.bp.Instant
类:
// create the UTC instant from 1388620296020
Instant instant = Instant.ofEpochMilli(1388620296020L);
System.out.println(instant); // 2014-01-01T23:51:36.020Z
输出为
2014-01-01T23:51:36.020Z
,因为Instant
始终为UTC。如果要将其转换为另一个时区中的日期/时间,则可以使用org.threeten.bp.ZoneId
类并创建一个org.threeten.bp.ZonedDateTime
:ZonedDateTime z = instant.atZone(ZoneId.of("Europe/Paris"));
System.out.println(z); // 2014-01-02T00:51:36.020+01:00[Europe/Paris]
输出将为
2014-01-02T00:51:36.020+01:00[Europe/Paris]
(将相同的UTC瞬间转换为巴黎时区)。请注意,API避免使用3个字母的时区名称(例如
ECT
或CST
),因为它们是ambiguous and not standard。始终喜欢使用全名(例如IANA database定义的Europe/Paris
或America/Los_Angeles
)-您可以通过调用ZoneId.getAvailableZoneIds()
获得所有可用的名称。如果要以其他格式打印日期,则可以使用
org.threeten.bp.format.DateTimeFormatter
(请参阅javadoc以查看所有可能的格式):ZonedDateTime z = instant.atZone(ZoneId.of("Europe/Paris"));
DateTimeFormatter fmt = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm:ss.SSS Z");
System.out.println(fmt.format(z)); // 02/01/2014 00:51:36.020 +0100