[英]Axis2 - Date Format
由Axis2作為對Web服務客戶端的響應輸出的日期格式格式為“2009-08-28 + 01:00”。 我想將此更改為僅顯示沒有時區信息的日期(例如:“2009-08-28”)
軸2 1.4.1
<xsd:element name="StartDate" type="xsd:date" />;
遺憾的是,無法將“StartDate”元素更改為xsd:string
或xsd:token
因為我正在使用xsd:date
XML Data Type,它被定義為
[-]CCYY-MM-DD[Z|(+|-)hh:mm]
因此,如果我設置
Calendar cal = Calendar.getInstance();
cal.setTimeZone(TimeZone.getTimeZone("UTC");
...
然后輸出看起來像這樣
2009-01-28Z
您可以將“UTC”替換為“GMT”或“”。
我可以擺脫“Z”嗎?
我遇到了同樣的問題,可以從日期中刪除時區!
您可以使用自己創建的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);
使用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)
);
你不能。
它的價值空間被描述為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架構第2部分:數據類型第二版3.2.7 dateTime
有一個Calendar#clear方法可以滿足您的需求。 要擺脫時區偏移,只需執行以下操作:
cal.clear(Calendar.ZONE_OFFSET);
請注意,沒有時區偏移的時間不明確。 它讓消費者有時間猜測UTC偏移。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.