【问题标题】:Convert String of type "2015-23-07T00:00:00Z" to XMLGregorianCalender of format "07/23/2015T00:00:00Z"将“2015-23-07T00:00:00Z”类型的字符串转换为“07/23/2015T00:00:00Z”格式的 XMLGregorianCalender
【发布时间】:2015-07-30 09:32:35
【问题描述】:

我正在调用一个 Web 服务,它接受日期为格式为 "07/23/2015T00:00:00Z" 的 Xmlgregoriancalendar,但我目前从我的数据库中获得的是 "2015-23-07T00:00:00Z"

如何转换这个String类型的XMLGregorianCalender类型的

"MM/dd/yyyy'T'HH:mm:ss.SSS'Z'"

由于该服务由某个第三方托管,我无法更改架构并需要实现此转换。

我试过了

Date d = new Date();
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy/MM/dd'T'HH:mm:ss.SSS'Z'");                                                       
String formattedDate1 = sdf1.format(d);                                                  
Date date = sdf1.parse(formattedDate1);                                                
GregorianCalendar gregorianCalendar;
XMLGregorianCalendar result = null;
gregorianCalendar = (GregorianCalendar)GregorianCalendar.getInstance();
gregorianCalendar.setTime(date);
result = DatatypeFactory.newInstance().newXMLGregorianCalendar(gregorianCalendar);

【问题讨论】:

  • 您实际上是否将其作为字符串存储在数据库中?如果是这样,为什么?我不希望 XMLGregorianCalendar 使用“MM/dd/yyyy'T'HH:mm:ss.SSS'Z'”格式,因为这不是 XML 中的标准化格式...您正在调用的 Web 服务从它的声音来看,它已经很破碎了。我怀疑您需要改用 SimpleDateFormat。
  • 否 实际上我正在从我的数据库中获取日期。知道如何将其转换为 XMLGregorianCalender。
  • 您想从2015-23-07T00:00:00Z 转换为07/23/2015T00:00:00Z
  • " XmlgreogorianCalender 格式为 07/23/2015T00:00:00Z" 是没有意义的,因为这不是日期/时间的 XML 格式。正如我之前所说,您需要使用 SimpleDateFormat。
  • 在我看来,您不能将 XMLGregorianCalendar 用于这种非标准格式。您需要自己创建 XML,并在构建时将日期时间表示为字符串。

标签: java date datetime calendar gregorian-calendar


【解决方案1】:
java.text.DateFormat outputFormat =new java.text.SimpleDateFormat("MM/dd/yyyy'T'HH:mm:ss'Z'");
java.text.DateFormat outputFormat1 =new java.text.SimpleDateFormat("yyyy-dd-MM'T'HH:mm:ss'Z'");
System.out.println(outputFormat.format(outputFormat1.parse("2015-23-07T00:00:00Z")));//07/23/2015T00:00:00Z

【讨论】:

  • 它返回一个字符串,我需要 XMLGregorianCalendar
  • @Anuj:为什么?是什么让您使用 XMLGregorianCalendar,当您不想要 XML 标准方式表示日期/时间时,这基本上是错误的选择?
  • @Jon 我正在调用第三方服务。现在该服务有一个请求模式。该模式的一个参数可以说是 XMLGregorianCalendar 类型的日期,它只接受“MM/dd/yyyy'T'HH:mm:ss.SSS'Z'”类型的日期时间。所以这是我需要实现它的唯一原因。我知道还有很多其他方法可以做,但问题是第三方服务并非一成不变
  • @Anuj:这是不合逻辑的。仅仅因为您正在调用第三方服务并不意味着您需要使用 XMLGregorianCalendar,并且鉴于该服务不接受 XMLGregorianCalendar 使用的格式,这表明您不能使用 XMLGregorianCalendar .我不知道还有多少种方法可以向您解释。
  • @Jon 无论如何感谢您的反馈,我希望我可以向您展示实际的请求架构,并且在通过soap UI 进行测试时,它接受我刚刚展示的格式。
【解决方案2】:

您可以使用SimpleDateFormat 来执行此操作。

从数据库中获取字符串,找到“-”并将其替换为“\”,然后将字符串解析为日期。实际上,SimpleDateFormat 会接受 "MM-dd-yyyy'T'HH:mm:ss.SSS'Z'" 以及 "MM/dd/yyyy'T'HH:mm:ss.SSS'Z'" 类型,您可以对其进行一些计算。

【讨论】:

    猜你喜欢
    • 2020-01-19
    • 1970-01-01
    • 2019-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-18
    • 2019-06-28
    相关资源
    最近更新 更多