0

我从 http://earthquake.usgs.gov/earthquakes/feed/geojson/all/hour获得了日期/时间格式数据

这是数据的引用:

"properties":{
    "mag":0.5,
    "place":"123km NNW of Talkeetna, Alaska",
    "time":1343795877,
    "tz":-480,
    "url":"/earthquakes/eventpage/ak10523664",
    "felt":null,
    "cdi":null,
    "mmi":null,
    "alert":null,
    "status":"AUTOMATIC",
    "tsunami":null,
    "sig":"4",
    "net":"ak",
    "code":"10523664",
    "ids":",ak10523664,",
    "sources":",ak,",
    "types":",general-link,general-link,geoserve,nearby-cities,origin,"
},

但是当我使用时:

Date date1 = new Date();
date1.setTime("1343795877"); 

结果是:Fri Jan 16 13:16:35 GMT+00:00 1970 但正确的日期是 2012 年 8 月 1 日星期三 04:37:57 UTC(来自同一网站的 CSV 版本)

我怎样才能得到正确的时间?

4

3 回答 3

2

数字“1343795877”是unix 时间- 自 1970 年以来经过的时间(以秒为单位)。

您需要将它乘以 1000,因为它是以为单位的时间,而 Date 构造函数需要毫秒。所以这会变魔术:

Date d = new Date(1343795877*1000);

您可以使用在线UNIX 到日期转换器来检查它。

请记住,UNIX 时间采用 UTC,它不会模仿用户时区 - 因此您需要应用您的时区。

我建议你使用JodaTime,它真的很方便。

下面是一个转换的例子:

DateTime dt = new DateTime(1343795877*1000);
dt.withZone(DateTimeZone.forID("UTC"));

编辑:

DateTimeFormatter formatter = 
    DateTimeFormat.forPattern("dd-MM-yyyy HH:mm:ss, SSS [z]");
formatter.print(dt);
于 2012-08-01T05:48:46.633 回答
1

首先你的语法是错误的。Date 没有诸如date.setTime(String). 它date.setTime(Long)需要milliseconds as argument。你得到的seconds只是乘以 1000 得到正确的日期。所以你的解决方案是date1.setTime(1343795877000L);

于 2012-08-01T05:47:30.257 回答
1

看看这里它很简单:

new Date(epochTime * epochFormat) // '1343795877' this time format is known as epoch time

epochTime是长类型的时间,例如。1343795877L
epochFormat1000如果epochTime,否则1如果是毫秒

在你的情况下,它以为单位,所以乘以1000

我认为您还应该使用SimpleDateFormatter格式化您的日期:

SimpleDateFormat dateFormat = new SimpleDateFormat("EEE dd-MMM-yy", Locale.ENGLISH); // date format and locale you want to use
dateFormat.setTimeZone("Asia/Kolkata"); // can have your time zone
String date = dateFormat.format(new Date(epochTime * epochFormat));

日期格式这里

于 2012-08-01T06:13:16.050 回答