java.util। XMLGregorian कैलेंडर में दिनांक




date xmlgregoriancalendar (6)

इस कोड को देखें: -

/* 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 से मिलने का कोई सुविधाजनक तरीका नहीं है। किसी XMLGregorian कैलेंडर में डेट करें?


उन लोगों के लिए जो यहां विपरीत रूपांतरण की तलाश कर सकते हैं ( XMLGregorianCalendar से Date ):

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

मान लें कि आप एक्सएमएल डीकोडिंग या एन्कोडिंग कर रहे हैं और JAXB का उपयोग कर रहे हैं, तो स्कीमा में प्रत्येक तारीख के लिए डेटटाइम को पूरी तरह बाध्यकारी करना और `XMLGregorianCalendar 'से कुछ और उपयोग करना संभव है।

इस तरह आप JAXB को दोहराए जाने वाले सामान कर सकते हैं, जबकि आप मूल्य प्रदान करने वाले समय को भयानक कोड लिखने में समय व्यतीत कर सकते हैं।

जोडाटाइम DateTime लिए उदाहरण: (java.util.Date के साथ ऐसा करना भी काम करेगा - लेकिन कुछ सीमाओं के साथ। मैं जोडाटाइम पसंद करता हूं और यह मेरे कोड से कॉपी किया गया है, इसलिए मुझे पता है कि यह काम करता है ...)

<jxb:globalBindings>
    <jxb:javaType name="org.joda.time.LocalDateTime" xmlType="xs:dateTime"
        parseMethod="test.util.JaxbConverter.parseDateTime"
        printMethod="se.seb.bis.test.util.JaxbConverter.printDateTime" />
    <jxb:javaType name="org.joda.time.LocalDate" xmlType="xs:date"
        parseMethod="test.util.JaxbConverter.parseDate"
        printMethod="test.util.JaxbConverter.printDate" />
    <jxb:javaType name="org.joda.time.LocalTime" xmlType="xs:time"
        parseMethod="test.util.JaxbConverter.parseTime"
        printMethod="test.util.JaxbConverter.printTime" />
    <jxb:serializable uid="2" />
</jxb:globalBindings>

और कनवर्टर:

public class JaxbConverter {
static final DateTimeFormatter dtf = ISODateTimeFormat.dateTimeNoMillis();
static final DateTimeFormatter df = ISODateTimeFormat.date();
static final DateTimeFormatter tf = ISODateTimeFormat.time();

public static LocalDateTime parseDateTime(String s) {
    try {
        if (StringUtils.trimToEmpty(s).isEmpty())
            return null;
        LocalDateTime r = dtf.parseLocalDateTime(s);
        return r;
    } catch (Exception e) {
        throw new IllegalArgumentException(e);
    }
}

public static String printDateTime(LocalDateTime d) {
    try {
        if (d == null)
            return null;
        return dtf.print(d);
    } catch (Exception e) {
        throw new IllegalArgumentException(e);
    }
}

public static LocalDate parseDate(String s) {
    try {
        if (StringUtils.trimToEmpty(s).isEmpty())
            return null;
        return df.parseLocalDate(s);
    } catch (Exception e) {
        throw new IllegalArgumentException(e);
    }
}

public static String printDate(LocalDate d) {
    try {
        if (d == null)
            return null;
        return df.print(d);
    } catch (Exception e) {
        throw new IllegalArgumentException(e);
    }
}

public static String printTime(LocalTime d) {
    try {
        if (d == null)
            return null;
        return tf.print(d);
    } catch (Exception e) {
        throw new IllegalArgumentException(e);
    }
}

public static LocalTime parseTime(String s) {
    try {
        if (StringUtils.trimToEmpty(s).isEmpty())
            return null;
        return df.parseLocalTime(s);
    } catch (Exception e) {
        throw new IllegalArgumentException(e);
    }
}

यहां देखें: तिथि के अनुसार XmlGregorian कैलेंडर को कैसे बदलें?

यदि आप टाइमज़ोन + टाइमस्टैम्प के आधार पर किसी तत्काल मानचित्र पर खुश हैं, और मूल टाइमज़ोन वास्तव में प्रासंगिक नहीं है, तो java.util.Date शायद ठीक है।


मुझे उम्मीद है कि यहां मेरा एन्कोडिंग सही है; डी इसे तेजी से बनाने के लिए केवल कन्स्ट्रक्टर कॉल के बजाय ग्रेगोरियन कैलेंडर की बदसूरत 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());

स्वीकार्य उत्तर में उनकी टिप्पणी से निकोलस मॉमार्ट्स को क्रेडिट।


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




xmlgregoriancalendar