相关疑难解决方法(0)

将符合ISO 8601的字符串转换为java.util.Date

我试图将ISO 8601格式的字符串转换为java.util.Date.

yyyy-MM-dd'T'HH:mm:ssZ如果与Locale(比较样本)一起使用,我发现该模式符合ISO8601标准.

但是,使用java.text.SimpleDateFormat,我无法转换格式正确的String 2010-01-01T12:00:00+01:00.我必须先将它转换为2010-01-01T12:00:00+0100没有冒号的.

那么,目前的解决方案是

SimpleDateFormat ISO8601DATEFORMAT = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ", Locale.GERMANY);
String date = "2010-01-01T12:00:00+01:00".replaceAll("\\+0([0-9]){1}\\:00", "+0$100");
System.out.println(ISO8601DATEFORMAT.parse(date));
Run Code Online (Sandbox Code Playgroud)

这显然不是那么好.我错过了什么或者有更好的解决方案吗?


回答

感谢JuanZe的评论,我发现了Joda-Time魔术,这里也有描述.

所以,解决方案是

DateTimeFormatter parser2 = ISODateTimeFormat.dateTimeNoMillis();
String jtdate = "2010-01-01T12:00:00+01:00";
System.out.println(parser2.parseDateTime(jtdate));
Run Code Online (Sandbox Code Playgroud)

或者更简单地说,通过构造函数使用默认解析器:

DateTime dt = new DateTime( "2010-01-01T12:00:00+01:00" ) ;
Run Code Online (Sandbox Code Playgroud)

对我来说,这很好.

java date iso8601

627
推荐指数
19
解决办法
55万
查看次数

这个日期格式是什么?2011-08-12T20:17:46.384Z

我有以下日期: 2011-08-12T20:17:46.384Z.这是什么格式的?我正在尝试使用Java 1.4解析它DateFormat.getDateInstance().parse(dateStr)并且我得到了

java.text.ParseException:Unparseable date:"2011-08-12T20:17:46.384Z"

我想我应该使用SimpleDateFormat进行解析,但我必须首先知道格式字符串.到目前为止yyyy-MM-dd,我所拥有的只是,因为我不知道T这个字符串中的含义是什么 - 与时区有关?此日期字符串来自文件CMIS下载历史记录媒体类型lcmis:downloadedOn上显示的标记.

java format time date simpledateformat

319
推荐指数
5
解决办法
31万
查看次数

Java格式yyyy-MM-dd'T'HH:mm:ss.SSSz到yyyy-mm-dd HH:mm:ss

我正在尝试将yyyy-MM-dd'T'HH:mm:ss.SSSz格式的日期格式化为yyyy-mm-dd HH:mm:ss,这应该很容易,但我不能让它工作.

必须解析的日期格式为:2012-10-01T09:45:00.000 + 02:00
现在我使用这个简单的日期格式化程序来格式化它:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSz", Locale.FRANCE);
Run Code Online (Sandbox Code Playgroud)

但是这给出了类似于2012-10-01T09的输出:45:00.000UTC + 00:00.

我也尝试使用"yyyy-MM-dd'T'HH:mm:ss.SSSZ"作为模式和"yyyy-MM-ddHH:mm:ss".后者以2012-10-01T09:45:00的形式返回日期,但尚未结束.

我认为将T分离出来会有点乱,并且无缘无故地创造开销,那么格式化这些日期的正确方法是什么?

为了说明我想将2012-10-01T09:45:00.000 + 02:00转换成2012-10-01 09:45:00

干杯!

java parsing date simpledateformat

44
推荐指数
3
解决办法
26万
查看次数

Java - SimpleDateFormat 格式化程序以毫秒为单位返回纪元时间

我对 Java 和一般编码非常陌生 - 我有一些代码以以下格式返回时间戳,如下yyyy.MM.dd HH:mm:ss:ms所示:

SimpleDateFormat formatter = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss:sss");
Run Code Online (Sandbox Code Playgroud)

这将返回:

2017.07.19 11:42:30:423
Run Code Online (Sandbox Code Playgroud)

有没有办法编辑上面的“SimpleDateFormat 格式化程序”代码以将日期/时间作为包含毫秒的纪元时间戳返回,以便返回的值按照以下格式进行格式化?

1500464550423
Run Code Online (Sandbox Code Playgroud)

我希望我可以修改代码的("yyyy.MM.dd HH:mm:ss:sss")一部分SimpleDateFormat formatter来做到这一点。

非常感谢任何帮助或建议。

谢谢

java datetime timestamp date epoch

4
推荐指数
1
解决办法
2万
查看次数

ZonedDateTime 忽略 ss 部分的 00

我正在尝试转换字符串值“2018-10-11T12:00:00Z”;到 ZonedDateTime。如果我使用默认的 ZonedDateTime.parse(zonedDateTime) ,则 ss 部分即 00 被删除,并且我得到“2018-10-11T12:00Z”作为输出。

您能帮忙如何保留 00 作为 SS 部分吗?

String zonedDateTime = "2018-10-11T12:00:00Z";

ZonedDateTime z =  ZonedDateTime.parse(zonedDateTime);
System.out.println(z);  // return 2018-10-11T12:00Z

ZonedDateTime z1 =  ZonedDateTime.parse (zonedDateTime, DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssZ") );

System.out.println(z1);  // Exception : Text '2018-10-11T12:00:00Z' could not be parsed at index 19
Run Code Online (Sandbox Code Playgroud)

java datetime-format seconds datetime-parsing zoneddatetime

2
推荐指数
1
解决办法
1924
查看次数

Java Spring:Jackson 反序列化到 ZonedDateTime

假设我想使用以下类从外部 JSON 有效负载进行反序列化:

public class MyObject {

    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
    private ZonedDateTime timestamp;

}
Run Code Online (Sandbox Code Playgroud)

当我尝试使用 JSON 负载时,Jackson 抛出以下错误:

Cannot deserialize value of type `java.time.ZonedDateTime` from String "2019-01-23T12:54:18.610Z": Failed to deserialize java.time.ZonedDateTime: (java.time.format.DateTimeParseException) Text '2019-01-23T12:54:18.610Z' could not be parsed at index 23
Run Code Online (Sandbox Code Playgroud)

如您所见,传入的字符串是"2019-01-23T12:54:18.610Z",据我所知,这是一个有效的 ZonedDateTime。使用 jshell,将该字符串解析为 ZonedDateTime 使用ZonedDateTime.parse("2019-01-23T12:54:18.610Z")结果在一个有效的 ZonedDateTime 中,正如我所期望的那样。

  • 为什么杰克逊在这里失败了?
  • 我该怎么做才能让它发挥作用?

我也不是 Spring 或 Jackson 的专家。谢谢。

编辑:我使用的是 Spring Boot v2.1.1.RELEASE。

java spring parsing jackson zoneddatetime

1
推荐指数
1
解决办法
3166
查看次数