我从中获得了日期/时间格式数据 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");
结果是:1月16日星期五13:16:35 GMT + 00:00 1970 但正确的日期是星期三,2012年8月1日04:37:57 UTC(来自同一网站的CSV版本)
我怎样才能得到正确的时间?
答案 0 :(得分:2)
数字“1343795877”是unix time - 自1970年以来经过的秒数。
您需要将它乘以1000,因为它是秒的时间,而日期构造函数需要毫秒。所以这将带来魔力:
Date d = new Date(1343795877*1000);
您可以使用在线UNIX to Date converter进行检查。
请记住,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);
答案 1 :(得分:1)
首先你的语法错了。日期没有date.setTime(String)
等方法。其date.setTime(Long)
需要milliseconds as argument
。你得到的是seconds
所以只需乘以1000即可得到正确的日期。所以你的解决方案是date1.setTime(1343795877000L);
答案 2 :(得分:1)
简单地看一下:
new Date(epochTime * epochFormat) // '1343795877' this time format is known as epoch time
在你的情况下,它在秒中乘以 1000 我认为您还应该使用 日期格式查看here epochTime
是长型的时间,例如。的 1343795877L 强>
epochFormat
1000 如果epochTime
秒,则 1 如果毫秒 < / p>
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));