[英]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
類解析String
: Long.parseLong(String s)
(在您嘗試時,也不能簡單地轉換字符串)。 相反,我使用Double.valueOf()
方法並使用.longValue()
保留Long
Trobbins 的答案是正確的,但老派。 我解除了Answer的數學,並使用了新的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.