往返时间字符串长到Java?

时间:2012-07-05 11:49:19

标签: java datetime

我有一个往返数据模式的时间字符串,如下所示:2012-07-05T11:30:44.1533815Z。这来自一些.NET服务。

如何在Java中将其转换为long

我已经尝试SimpleDateTimeFormat似乎无法找出正确的格式说明符..

5 个答案:

答案 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 Userguidehttp://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