我有一个往返数据模式的时间字符串,如下所示:2012-07-05T11:30:44.1533815Z
。这来自一些.NET服务。
如何在Java中将其转换为long
?
我已经尝试SimpleDateTimeFormat
似乎无法找出正确的格式说明符..
答案 0 :(得分:4)
试试这个:
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 :(得分: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();
但是你必须检查你约会的最后一个字符的含义是什么?这是时区定义吗?如果你没有确定它并且只是逃避它,你就有可能用不好的时区解释日期。
答案 2 :(得分: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) {
.....
}
答案 3 :(得分:2)
由于这是iso格式的日期时间,您可以使用优秀的Joda datetime库轻松解析它:
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格式。
答案 4 :(得分:0)
请注意这一点,如果我给的是dateTime 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。
将即时转换为日期对象
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