Axis2 - Date Format

霸气de小男生 提交于 2019-12-03 03:12:36

The problem is caused by using Calendar object as a source value for xsd:date field. When you get instance of Calendar it always goes with timezone (default timezone is used if not specified explicitly). To remove timezone use clear() method and restore all fields excluding timezone. Then XML mapping library (I tested with XmlBeans, but I think it's also true for other binding libraries supported by Axis) generates XML without timezone suffix.

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

I had the same problem and it is possible to remove timezone from dates!

You can use your own created ConvertUtil.

At first you must create class with your customized convert method/methods:

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

Then you must set this class as SYSTEM_PROPERTY_ADB_CONVERTERUTIL:

String convert_class = "com.firm.myConvertUtil";
System.setProperty(ConverterUtil.SYSTEM_PROPERTY_ADB_CONVERTERUTIL, convert_class);

You can't.

Its value space is described as a combination of date and time of day in Chapter 5.4 of ISO 8601. Its lexical space is the extended format:

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

The time zone may be specified as Z (UTC) or (+|-)hh:mm. Time zones that aren't specified are considered undetermined.

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

Edit:

For reference see XML Schema Part 2: Datatypes Second Edition 3.2.7 dateTime

There is a Calendar#clear method that will accomplish what you need. To get rid of the timezone offset simply do the following:

cal.clear(Calendar.ZONE_OFFSET);

Note that a time without a timezone offset is ambiguous. It leaves the consumer of the time to guess the UTC offset.

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!