« Apache2.2 + Tocmat + Proxy | Main | Sunbird »

2007.06.25

JAXBで日付/時刻の処理

 JAXBを用いて「フォーマット付きの日付型や時刻型を使用する場合、どのようにすれば?」に関してですが、javax.xml.datatype.XMLGregorianCalendarクラスを用いることで、ある程度思ったようなフォーマットで出力できるようになるようです。

 ざっくりと以下のような感じ。

@XmlAccessorType(value=XmlAccessType.FIELD)
@XmlRootElement
public class DateTimeTest {
  @XmlElement()
  @XmlSchemaType(name="Date")
  private XMLGregorianCalendar date;
  @XmlElement()
  @XmlSchemaType(name="Time")
  private XMLGregorianCalendar time;
  public DateTimeTest() {
    super();
  }
  public XMLGregorianCalendar getDate() {
    return date;
  }
  public void setDate(XMLGregorianCalendar date) {
    this.date = date;
  }
  public XMLGregorianCalendar getTime() {
    return time;
  }
  public void setTime(XMLGregorianCalendar time) {
    this.time = time;
  }
  public static void main(String[] args) throws Exception {
    {
      String s =
        "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>" +
        "<dateTimeTest><date>2007-12-04</date><time>12:45:34</time></dateTimeTest>";
      JAXBContext content = JAXBContext.newInstance(DateTimeTest.class);
      Unmarshaller m = content.createUnmarshaller();
      DateTimeTest test = (DateTimeTest)m.unmarshal(new StringReader(s));
      System.out.println(test.getDate());
      System.out.println(test.getTime());
    }
    {
      DateTimeTest test = new DateTimeTest();
      DatatypeFactory factory = DatatypeFactory.newInstance();
      test.setDate(factory.newXMLGregorianCalendarDate(2007, 12, 4, 540));
      test.setTime(factory.newXMLGregorianCalendarTime(12, 45, 34, DatatypeConstants.FIELD_UNDEFINED));
      JAXBContext content = JAXBContext.newInstance(DateTimeTest.class);
      Marshaller m = content.createMarshaller();
      m.setProperty("jaxb.formatted.output", Boolean.TRUE);
      StringWriter sw = new StringWriter();
      m.marshal(test, sw);
      sw.close();
      System.out.println(sw.toString());
    }
  }
}

 XmlSchemaTypeの部分で例えば@XmlSchemaType(name="gYear") と指定すると「年」(yyyy)のみの表示となります(他にも、gYearMonth等も指定可能です)。が、おそらく、yyyyMMddといった感じで区切り文字なしの指定はできないような気がします(XMLSchemaの型定義に含まれていないので)。

|

« Apache2.2 + Tocmat + Proxy | Main | Sunbird »

Java」カテゴリの記事

Comments

Post a comment



(Not displayed with comment.)


Comments are moderated, and will not appear on this weblog until the author has approved them.



TrackBack


Listed below are links to weblogs that reference JAXBで日付/時刻の処理:

« Apache2.2 + Tocmat + Proxy | Main | Sunbird »