簡體   English   中英

將UTC日期從科學記數法轉換為Java.util.Date

[英]Convert UTC date from scientific notation to Java.util.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);

這應該適合你:

public static void main(String[] args) {

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

    System.out.println(time);
}

輸出:

Wed Jul 15 23:50:20 EDT 2015

由於您使用的是科學記數法,因此無法使用Long類解析StringLong.parseLong(String s) (在您嘗試時,也不能簡單地轉換字符串)。 相反,我使用Double.valueOf()方法並使用.longValue()保留Long

Trobbins 的答案是正確的,但老派。 我解除了Answer的數學,並使用了新的java.time類。

java.time

在Java 8及更高版本中,您可以使用新的java.time包 ,它取代了麻煩的舊java.util.Date /.Calendar類。 教程

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 );

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM