2

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

如何将其转换为longJava 中的 a?

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

4

5 回答 5

5

试试这个:

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();
}

干杯

于 2012-07-05T12:00:04.753 回答
2

您需要使用SimpleDateFormat将其解析为 Date 。

从日期开始,您可以使用 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();

但是您必须检查日期的最后一个字符的含义是什么?那是时区定义吗?如果您没有确定它并只是逃避它,您将冒着用错误的时区解释日期的风险。

于 2012-07-05T11:50:56.827 回答
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) {
              .....
}
于 2012-07-05T11:56:14.560 回答
2

由于这是 iso 格式的日期时间,您可以使用出色的 Joda 日期时间库轻松解析它,如下所示:

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

请参阅“输入和输出”一章下的Joda 用户指南和http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html。它将负责以正确的方式解析 ISO8601 格式。

于 2012-07-05T12:09:31.727 回答
0

请注意这一点,如果我给出 dateTime UTC "2017-07-13T05:43:24.6966215Z",它会返回 ISTThu 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);

所以在经历了这个答案之后,我才知道这个给定的字符串不是日期格式而不是 ISO 即时格式。

毫秒 (SSS) 只能是三位数字。不仅如此,日期还会滚动 - 例如 10:38:14.1000 变为 10:38:15.000。

将 Instant 转换为 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 检查这个答案

于 2017-07-13T06:07:24.937 回答