我有這樣的往返數據模式的TIMEDATE字符串:2012-07-05T11:30:44.1533815Z
。這來自一些.NET服務。在Java中往返時間字符串長?
如何將其轉換爲Java中的long
?
我已經試過SimpleDateTimeFormat
看來我無法弄清楚正確的格式說明..
我有這樣的往返數據模式的TIMEDATE字符串:2012-07-05T11:30:44.1533815Z
。這來自一些.NET服務。在Java中往返時間字符串長?
如何將其轉換爲Java中的long
?
我已經試過SimpleDateTimeFormat
看來我無法弄清楚正確的格式說明..
試試這個:
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();
}
歡呼
你需要將它解析使用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();
但是你要檢查什麼是你約會的最後一個字符的含義是什麼?這是一個時區定義嗎?如果您不確定並簡單地逃避它,您將有風險去解釋日期不正確的時區。
的最後一個字符是指UTC被測量的時候,看到http://www.cl.cam .ac.uk /〜mgk25/iso-time.html – 2012-07-05 12:02:49
非常感謝,作品! – 2012-07-05 12:30:22
試試這個:
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) {
.....
}
由於這是在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格式。
噢,好,試試吧 – 2012-07-05 12:31:00
請注意這一點,如果我給日期時間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
非常感謝,作品! – 2012-07-05 12:29:26