sourcecode

java.displaces를 클릭합니다.XMLGregorian 캘린더 날짜

copyscript 2022. 8. 14. 12:23
반응형

java.displaces를 클릭합니다.XMLGregorian 캘린더 날짜

java.util에서 쉽게 얻을 수 있는 방법이 없을까요?XMLGregorian Calendar 날짜?

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

찾고 (「」로부터)XMLGregorianCalendar로로 합니다.Date

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

나는 이 10년 된 질문에 대해 한 걸음 물러서서 현대적인 시각을 갖고 싶다., 그 the 」Date ★★★★★★★★★★★★★★★★★」XMLGregorianCalendar는 이제 오래된 것입니다.나는 그들의 사용에 이의를 제기하고 대안을 제시합니다.

  • Date항상 디자인이 서툴렀고 20년 이상 되었습니다.이것은 간단합니다. 용하사
  • XMLGregorianCalendar츠미야제가 알기로는 XML 문서의 날짜 및 시간을 XML 형식으로 제작할 때 사용되었던 것으로 알고 있습니다.맘에 들다2009-05-07T19:05:45.678+02:00 ★★★★★★★★★★★★★★★★★」2009-05-07T17:05:45.678Z이러한 형식은 ISO 8601과 매우 잘 일치하며, 현재 Java 날짜 및 시간 API인 java.time 클래스가 이를 생성할 수 있습니다.

변환 불필요

(대부분을 위해, (대부분?)의 치환.Date 되다InstantA . ANInstant는 시점: 입니다.Dateㄹ 것 같다.

    Instant yourInstant = // ...
    System.out.println(yourInstant);

이 스니펫의 출력 예를 다음에 나타냅니다.

2009-05-07T17:05:45.678Z

예시의.XMLGregorianCalendar의의문문 문다다다다다여러분 대부분이 알다시피, 그것은Instant.toString으로 System.out.println.time을 java.time 간에 Date,Calendar,XMLGregorianCalendar기타 클래스(변환이 필요한 경우도 있지만 다음 섹션에서 몇 가지를 보여 드리겠습니다).

오프셋 제어

쪽도 아니다.Date 없다InstantUTC에 의한 것입니다. 가장 투표율을 를 사용하여 Ben 합니다.XMLGregorianCalendar하려면 , 「」를 사용합니다OffsetDateTime §:

    ZoneId zone = ZoneId.of("America/Asuncion");
    OffsetDateTime dateTime = yourInstant.atZone(zone).toOffsetDateTime();
    System.out.println(dateTime);

2009-05-07T 13:05:45.678-04:00

XML을 사용합니다.다시 는, 「JVM」을 합니다.zone로로 합니다.ZoneId.systemDefault().

XMLGregorianCalendar가 꼭 필요한 경우

.Instant로로 합니다.XMLGregorianCalendar각각 장단점을 가진 몇 가지를 발표하겠습니다.그냥 ㅇㅇㅇ, 로...XMLGregorianCalendar같은 끈을 만들다2009-05-07T17:05:45.678Z 수 : 는 、 음 、 음 、 음 、 음 、 음 、 , 、 , 、 , 、 , 、 a 、 a 。

    String dateTimeString = yourInstant.toString();
    XMLGregorianCalendar date2
            = DatatypeFactory.newInstance().newXMLGregorianCalendar(dateTimeString);
    System.out.println(date2);

2009-05-07T17:05:45.678Z

찬성: 짧고 놀라움을 주지 않는다고 생각합니다.단점: 내게는 순간을 문자열로 포맷하고 다시 해석하는 것이 낭비처럼 느껴집니다.

    ZonedDateTime dateTime = yourInstant.atZone(zone);
    GregorianCalendar c = GregorianCalendar.from(dateTime);
    XMLGregorianCalendar date2 = DatatypeFactory.newInstance().newXMLGregorianCalendar(c);
    System.out.println(date2);

2009-05-07T 13:05:45.678-04:00

찬성: 공식 전환입니다.오프셋 제어는 자연스럽게 이루어집니다.단점: 더 많은 단계를 거치기 때문에 더 길다.

데이트 상대라도 잡으면?

구식이라면Date할 수 이를 API로 변환합니다.Instant:

    Instant i = yourDate.toInstant();
    System.out.println(i);

출력은 이전과 동일합니다.

2009-05-07T17:05:45.678Z

하려면 더 합니다.OffsetDateTime위와 같은 방법으로

★★★★★★★★★★★★★★★★★★★★★★★★★★★★.Date XMLGregorianCalendar벤 놀랜드의 답을 사용하세요.

링크

다음은 GregoryCalendar에서 XMLGregorianCalendar로 변환하는 방법입니다.java.util에서 변환하는 부분은 생략하겠습니다.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);
   }

}

편집: 슬로우:-)

Joda-Time 라이브러리를 사용한 한 줄의 예:

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

니콜라스 몸마르츠에게 인정된 답변에 대한 그의 코멘트를 인정한다.

위의 답변이 저의 정확한 요구를 충족시키지 못했기 때문에 아래에 솔루션을 추가하려고 합니다.내 XML 스키마에는 Date Time 필드가 아닌 별도의 Date 요소와 Time 요소가 필요했습니다.위에서 사용한 표준 XMLGregorianCalendar 컨스트럭터는 DateTime 필드를 생성합니다.

gothca가 몇 개 있습니다.예를 들어 gothca는 월에 1을 추가해야 합니다(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);

여기서의 인코딩이 올바르기를 바랍니다;D 더 빠르게 하려면 컨스트럭터 호출 대신 GregoryCalendar의 추악한 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);
   }

}

하여 xml을 사용하고 JAXB그러면 dateTime 바인딩을 완전히 대체하고 스키마 내의 모든 날짜에 대해 XMLGregorianCalendar 이외의 것을 사용할 수 있습니다.

'이렇게'를 가질 수 .JAXB가치를 제공하는 멋진 코드를 작성하는 데 시간을 할애할 수 있는 동안 반복적인 작업을 수행할 수 있습니다.

의 예DateTime (하여 이 (동.동.동.동.동.동.동.동.동.동.동.동.동.동.동.동.동.동.동.동.동.서.날짜도 사용할 수 있지만 특정 제한이 있습니다.코드에서 복사되어 있기 때문에 동작하고 있는 것을 알 수 있습니다.

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

여기를 참조하십시오. XmlGregorianCalendar를 날짜로 대체하는 방법

스탬프에 해, 관련되지 , 순간의 는, 「+」, 「+」, 「-」, 「-」, 「-」, 「-」, 「-」, 「-」, 「-, 「-」, 「-, 「-」, 「-, 「-」를 참조해 주세요.java.util.Date아마 괜찮을 거예요.

이 코드를 확인해 주세요.-

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

여기서 완전한 를 볼 수 있습니다.

나의 솔루션

public static XMLGregorianCalendar DateToXMLGregorianCalendar(Date date) {

    GregorianCalendar gregoriancalendar = new GregorianCalendar();
    gregoriancalendar.setTime(date);
    XMLGregorianCalendar xmlGregorianCalendar = new XMLGregorianCalendarImpl(gregoriancalendar);
    return xmlGregorianCalendar;
}

언급URL : https://stackoverflow.com/questions/835889/java-util-date-to-xmlgregoriancalendar

반응형