2012-07-05 31 views
0

我有這樣的往返數據模式的TIMEDATE字符串:2012-07-05T11:30:44.1533815Z。這來自一些.NET服務。在Java中往返時間字符串長?

如何將其轉換爲Java中的long

我已經試過SimpleDateTimeFormat看來我無法弄清楚正確的格式說明..

回答

3

試試這個:

public long getTime(String time) throws ParseException { 
    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSSSSS'Z'"); 
    Date date = df.parse(time); 

    return date.getTime(); 
} 

歡呼

+1

非常感謝,作品! – 2012-07-05 12:29:26

2

你需要將它解析使用SimpleDateFormat日期。

從一個日期,你可以得到,使用的getTime(),以毫秒爲單位的Unix紀元,這是一個漫長的。

這應該像這樣開頭:

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSSS'Z'", Locale.ENGLISH); 
long myTime = format.parse("2012-07-05T11:30:44.1533815Z").getTime(); 

但是你要檢查什麼是你約會的最後一個字符的含義是什麼?這是一個時區定義嗎?如果您不確定並簡單地逃避它,您將有風險去解釋日期不正確的時區。

+0

的最後一個字符是指UTC被測量的時候,看到http://www.cl.cam .ac.uk /〜mgk25/iso-time.html – 2012-07-05 12:02:49

+0

非常感謝,作品! – 2012-07-05 12:30:22

2

試試這個:

try { 
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-M-dd'T'HH:mm:ss.SSSSSSS'Z'"); 
    long time = dateFormat.parse("2012-07-05T11:30:44.1533815Z").getTime(); 
} catch (ParseException e) { 
       ..... 
} 
+0

最後七米是不正確的。小米是小時分鐘。 – peshkira 2012-07-05 12:00:36

+0

啊我看到我錯了。 – 2012-07-05 12:00:59

+0

現在,這是正確的;)乾杯! – peshkira 2012-07-05 12:01:37

2

由於這是在ISO格式的日期時間,你可以使用優秀喬達日期時間庫輕鬆地分析它因爲這樣:

DateTimeFormatter fmt = ISODateTimeFormat.dateTime(); 
DateTime dt = fmt.parseDateTime("2012-07-05T11:30:44.1533815Z"); 
long dtl = dt.getMillis(); 

參見Joda Userguide在「輸入和輸出」章節和http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html下。它將負責以正確的方式解析ISO8601格式。

+0

噢,好,試試吧 – 2012-07-05 12:31:00

0

請注意這一點,如果我給日期時間UTC "2017-07-13T05:43:24.6966215Z"它給我回IST Thu Jul 13 07:39:30 IST 2017而不是Thu Jul 13 11:13:25 IST 2017

String rawDate = "2017-07-13T05:43:24.6966215Z"; 
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSSSSS'Z'"); 
simpleDateFormat.setTimeZone(TimeZone.getTimeZone("IST")); 
Date date = simpleDateFormat.parse(rawDate); 
System.out.println(date); 

所以通過this answer走後我才知道這個給定的字符串是不是日期格式,而不是ISO即時格式。

毫秒(SSS)只能是三位數。不僅如此,日期翻轉 - 例如, 10:38:14.1000變成10:38:15.000。

即時轉換爲Date對象

String rawDate = "2017-07-13T05:43:24.6966215Z"; 
DateTimeFormatter instantFormater = DateTimeFormatter.ISO_INSTANT.withZone(ZoneId.of("Asia/Kolkata")); 
Instant instant = Instant.from(instantFormater.parse(rawDate)); 
System.out.println(Date.from(instant)); 

它給預期Thu Jul 13 11:13:24 IST 2017 檢查this answer