java.util.Date到XMLGregorianCalendar





(8)


看看這個代碼: -

/* Create Date Object */
Date date = new Date();
XMLGregorianCalendar xmlDate = null;
GregorianCalendar gc = new GregorianCalendar();

gc.setTime(date);

try{
    xmlDate = DatatypeFactory.newInstance().newXMLGregorianCalendar(gc);
}
catch(Exception e){
    e.printStackTrace();
}

System.out.println("XMLGregorianCalendar :- " + xmlDate);

你可以here看到完整的例子

沒有從java.util.Date到XMLGregorianCalendar的簡便方法嗎?




GregorianCalendar c = new GregorianCalendar();
c.setTime(yourDate);
XMLGregorianCalendar date2 = DatatypeFactory.newInstance().newXMLGregorianCalendar(c);



我希望我的編碼是正確的; D為了更快地使用GregorianCalendar的醜陋的getInstance()調用,而不是構造函數調用:

import java.util.GregorianCalendar;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;

public class DateTest {

   public static void main(final String[] args) throws Exception {
      // do not forget the type cast :/
      GregorianCalendar gcal = (GregorianCalendar) GregorianCalendar.getInstance();
      XMLGregorianCalendar xgcal = DatatypeFactory.newInstance()
            .newXMLGregorianCalendar(gcal);
      System.out.println(xgcal);
   }

}



使用Joda-Time庫的一行示例:

XMLGregorianCalendar xgc = DatatypeFactory.newInstance().newXMLGregorianCalendar(new DateTime().toGregorianCalendar());

感謝Nicolas Mommaerts從他在接受的答復中的評論。




對於那些可能最終在這裡尋找相反的轉換(從XMLGregorianCalendarDate ):

XMLGregorianCalendar xcal = <assume this is initialized>;
java.util.Date dt = xcal.toGregorianCalendar().getTime();



這裡是一個從GregorianCalendar轉換為XMLGregorianCalendar的方法; 我將離開從java.util.Date轉換為GregorianCalendar的部分,作為練習:

import java.util.GregorianCalendar;

import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;

public class DateTest {

   public static void main(final String[] args) throws Exception {
      GregorianCalendar gcal = new GregorianCalendar();
      XMLGregorianCalendar xgcal = DatatypeFactory.newInstance()
            .newXMLGregorianCalendar(gcal);
      System.out.println(xgcal);
   }

}

編輯:Slooow :-)




只是以為我會在下面添加我的解決方案,因為上面的答案不符合我的確切需求。 我的Xml架構需要單獨的日期和時間元素,而不是單獨的DateTime字段。 上面使用的標準XMLGregorianCalendar構造函數將生成一個DateTime字段

請注意有幾個gothca,比如不得不在一個月內添加一個(因為java從0開始計數)。

GregorianCalendar cal = new GregorianCalendar();
cal.setTime(yourDate);
XMLGregorianCalendar xmlDate = DatatypeFactory.newInstance().newXMLGregorianCalendarDate(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH)+1, cal.get(Calendar.DAY_OF_MONTH), 0);
XMLGregorianCalendar xmlTime = DatatypeFactory.newInstance().newXMLGregorianCalendarTime(cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE), cal.get(Calendar.SECOND), 0);



我有同樣的問題,我發現插入當前日期到一個準備好的聲明最簡單的方法是這樣的:

preparedStatement.setDate(1, new java.sql.Date(new java.util.Date().getTime()));




java xml date xmlgregoriancalendar