Axis2 - 日期格式

Dyn*_*yte 8 java xml xsd axis2

脚本

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

组态

图书馆

轴2 1.4.1

WSDL

<xsd:element name="StartDate" type="xsd:date" />;
Run Code Online (Sandbox Code Playgroud)

  • 是否可以更改Axis 2用于写入日期信息的输出格式?
  • 你能看到.NET客户重新转换这种日期格式有什么问题吗?

约束

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


问题改进

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

[-]CCYY-MM-DD[Z|(+|-)hh:mm]
Run Code Online (Sandbox Code Playgroud)

因此,如果我设置

Calendar cal = Calendar.getInstance();
cal.setTimeZone(TimeZone.getTimeZone("UTC");
...
Run Code Online (Sandbox Code Playgroud)

然后输出看起来像这样

2009-01-28Z
Run Code Online (Sandbox Code Playgroud)

您可以将"UTC"替换为"GMT"或"".

我可以摆脱"Z"吗?

Mic*_*las 9

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

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

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

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

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

String convert_class = "com.firm.myConvertUtil";
System.setProperty(ConverterUtil.SYSTEM_PROPERTY_ADB_CONVERTERUTIL, convert_class);
Run Code Online (Sandbox Code Playgroud)


Art*_*ich 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)
);
Run Code Online (Sandbox Code Playgroud)