将UTC日期从科学记数法转换为Java.util.Date

时间:2015-08-10 18:15:07

标签: java date

我试图将created_utc日期从Reddit的json转换为Date对象,但我不断得到一个" Unparceable"错误。他们日期的一个例子是:created_utc": 1.43701862E9,我告诉他的是一个unix时间戳。

根据我的研究,这段代码应该转换它:

String date = "1.43701862E9";
java.util.Date time = new java.util.Date((long)date*1000);

但显然我在将日期乘以1000时收到错误。

这是我通常用来转换字符串日期的代码:

    String date = "1.43701862E9";
    Calendar cal = Calendar.getInstance(TimeZone.getDefault());
    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z");
    format.parse(date);

2 个答案:

答案 0 :(得分:5)

这应该适合你:

String

输出:

Long

由于您使用了科学记数法,因此您无法使用Long.parseLong(String s)类解析Long.longValue()(您也不能简单地使用字符串转换字符串#39;重新尝试)。相反,我使用Double.valueOf()方法并使用{{1}}

保留{{1}}

答案 1 :(得分:2)

Trobbins的{p> The answer是正确的但是老派。我解除了Answer的数学,并使用了新的java.time类。

java.time

在Java 8及更高版本中,您可以使用新的java.time package来取代麻烦的旧java.util.Date /。日历类。 (Tutorial

String input = "1.43701862E9";
long milliSinceEpoch = Double.valueOf( input ).longValue() * 1_000L ;
Instant instant = Instant.ofEpochMilli( milliSinceEpoch ) ;
ZoneId zoneId = ZoneId.of( "America/Montreal" ) ;
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId ) ;

尽量避免使用java.util.Date/.Calendar,但如果需要,可以转换。

java.util.Date date = Date.from( zdt.toInstant() );  // Or… Date.from( instant );
java.util.Calendar calendar = GregorianCalendar.from( zdt );