8

设想

Axis2 作为对 Web 服务客户端的响应输出的日期格式为“2009-08-28+01:00”。我想将其更改为仅显示没有时区信息的日期(例如:“2009-08-28”)

配置

图书馆

轴 2 1.4.1

WSDL

<xsd:element name="StartDate" type="xsd:date" />;

问题

  • 是否可以更改轴 2 用于写入日期信息的输出格式?
  • 您能看到 .NET 客户端重新转换此日期格式的任何问题吗?

约束

不幸的是,无法将“StartDate”元素更改为xsd:stringxsd:token


问题细化

因为我正在使用xsd:date定义为的 XML 数据类型

[-]CCYY-MM-DD[Z|(+|-)hh:mm]

因此,如果我设置

Calendar cal = Calendar.getInstance();
cal.setTimeZone(TimeZone.getTimeZone("UTC");
...

然后输出看起来像这样

2009-01-28Z

您可以将“UTC”替换为“GMT”或“”。

我可以摆脱“Z”吗?

4

4 回答 4

9

我遇到了同样的问题,可以从日期中删除时区!

您可以使用自己创建的 ConvertUtil。

首先,您必须使用自定义的转换方法/方法创建类:

public class myConvertUtil extends org.apache.axis2.databinding.utils.ConverterUtil
    {
    public static String convertToString(Date value)
        {
        // return customized Date format
        }
    }

然后您必须将此类设置为SYSTEM_PROPERTY_ADB_CONVERTERUTIL

String convert_class = "com.firm.myConvertUtil";
System.setProperty(ConverterUtil.SYSTEM_PROPERTY_ADB_CONVERTERUTIL, convert_class);
于 2011-03-30T09:11:30.793 回答
6

该问题是由于使用 Calendar 对象作为 xsd:date 字段的源值引起的。当您获得 Calendar 实例时,它始终与时区一起使用(如果未明确指定,则使用默认时区)。要删除时区,请使用 clear() 方法并恢复除时区之外的所有字段。然后 XML 映射库(我用 XmlBeans 测试过,但我认为 Axis 支持的其他绑定库也是如此)生成没有时区后缀的 XML。

Calendar myDate = Calendar.getInstance();   // returns GregorianCalendar
Calendar now = (Calendar)myDate.clone();    // save current timestamp
myDate.clear(); // this clears the fields, including Calendar.ZONE_OFFSET
myDate.set(     //set all fields back from the saved copy
    now.get(Calendar.YEAR),
    now.get(Calendar.MONTH),
    now.get(Calendar.DAY_OF_MONTH),
    now.get(Calendar.HOUR_OF_DAY),
    now.get(Calendar.MINUTE),
    now.get(Calendar.SECOND)
);
于 2011-06-12T13:57:56.540 回答
0

你不能。

它的值空间在 ISO 8601 的第 5.4 章中被描述为日期和时间的组合。它的词法空间是扩展格式:

[-]CCYY-MM-DDThh:mm:ss[Z|(+|-)hh:mm]

时区可以指定为 Z (UTC) 或 (+|-)hh:mm。未指定的时区被视为未确定。

http://books.xmlschemata.org/relaxng/ch19-77049.html

编辑:

有关参考,请参阅XML Schema Part 2: Datatypes Second Edition 3.2.7 dateTime

于 2009-08-28T11:26:42.077 回答
0

有一个 Calendar#clear 方法可以完成你所需要的。要摆脱时区偏移,只需执行以下操作:

cal.clear(日历.ZONE_OFFSET);

请注意,没有时区偏移的时间是不明确的。它让消费者有时间猜测 UTC 偏移量。

于 2013-01-30T17:26:15.297 回答