在 Java 中將字串日期轉換為 XMLGregorianCalendar
1. 概述
在本教程中,我們將了解將String Date 轉換為XMLGregorianCalendar各種方法。
**XMLGregorianCalendar**
XML 模式標準定義了以 XML 格式指定日期的明確規則。為了使用這種格式,Java 1.5 中引入的 Java 類別XMLGregorianCalendar,表示W3C XML Schema 1.0 日期/時間資料類型。
javax.xml.datatype套件中的DatatypeFactory類別提供了用於建立各種 XML 模式內建類型的實例的工廠方法。我們將使用此類來產生XMLGregorianCalendar.
3. String日期轉XMLGregorianCalendar
首先,我們將了解如何將沒有timestamp String日期轉換為XMLGregorianCalendar 。模式yyyy-MM-dd通常用於表示日期。
3.1.使用標準DatatypeFactory
以下是使用DatatypeFactory將日期字串解析為XMLGregorianCalendar範例:
XMLGregorianCalendar usingDatatypeFactoryForDate(String dateString) throws DatatypeConfigurationException {
return DatatypeFactory.newInstance().newXMLGregorianCalendar(dateString);
}
在上面的範例中, newXMLGregorianCalendar()方法根據日期的字串表示形式建立XMLGregorianCalendar實例。我們提供的日期遵循 XML 架構dateTime資料類型。
讓我們透過執行轉換來建立XMLGregorianCalendar的實例:
void givenStringDate_whenUsingDatatypeFactory_thenConvertToXMLGregorianCalendar() throws DatatypeConfigurationException {
String dateAsString = "2014-04-24";
XMLGregorianCalendar xmlGregorianCalendar = StringDateToXMLGregorianCalendarConverter.usingDatatypeFactoryForDate(dateAsString);
assertEquals(24, xmlGregorianCalendar.getDay());
assertEquals(4, xmlGregorianCalendar.getMonth());
assertEquals(2014, xmlGregorianCalendar.getYear());
}
3.2.使用LocalDate
LocalDate是一個**不可變的、線程安全的類別。此外, LocalDate只能**保存日期值,而沒有時間部分。在這種方法中,我們首先將字串日期轉換為LocalDate實例,然後再次將其轉換為XMLGregorianCalendar :
XMLGregorianCalendar usingLocalDate(String dateAsString) throws DatatypeConfigurationException {
LocalDate localDate = LocalDate.parse(dateAsString);
return DatatypeFactory.newInstance().newXMLGregorianCalendar(localDate.toString());
}
我們來看下面的測試程式碼:
void givenStringDateTime_whenUsingApacheCommonsLang3_thenConvertToXMLGregorianCalendar() throws DatatypeConfigurationException {
XMLGregorianCalendar xmlGregorianCalendar = StringDateToXMLGregorianCalendarConverter.usingLocalDate(dateAsString);
assertEquals(24, xmlGregorianCalendar.getDay());
assertEquals(4, xmlGregorianCalendar.getMonth());
assertEquals(2014, xmlGregorianCalendar.getYear());
}
4. 將日期和時間字串轉換為XMLGregorianCalendar
現在,我們將看到將帶有timestamp的字串日期轉換為XMLGregorianCalendar的多種方法。模式yyyy-MM-dd'T'HH:mm:ss通常用於表示 XML 中的日期和時間。
4.1.使用SimpleDateFormat類
將帶有timеstamp的日期轉換為XMLGregorianCalendar傳統方法之一是使用SimplеDatеFormat類別。讓我們從dateTimeAsString建立一個XMLGregorianCalendar實例:
XMLGregorianCalendar usingSimpleDateFormat(String dateTimeAsString) throws DatatypeConfigurationException, ParseException {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
Date date = simpleDateFormat.parse(dateTimeAsString);
return DatatypeFactory.newInstance().newXMLGregorianCalendar(simpleDateFormat.format(date));
}
我們使用SimpleDateFormat將輸入 String dateTime解析為Date對象,然後在建立XMLGregorianCalendar實例之前將Date對象格式化回 String。
讓我們測試一下這個方法:
void givenStringDateTime_whenUsingSimpleDateFormat_thenConvertToXMLGregorianCalendar() throws DatatypeConfigurationException, ParseException {
XMLGregorianCalendar xmlGregorianCalendar = StringDateToXMLGregorianCalendarConverter.usingSimpleDateFormat(dateTimeAsString);
assertEquals(24, xmlGregorianCalendar.getDay());
assertEquals(4, xmlGregorianCalendar.getMonth());
assertEquals(2014, xmlGregorianCalendar.getYear());
assertEquals(15, xmlGregorianCalendar.getHour());
assertEquals(45, xmlGregorianCalendar.getMinute());
assertEquals(30, xmlGregorianCalendar.getSecond());
}
4.2.使用GregorianCalendar類
GregorianCalendar是抽象類別java.util.Calendar的具體實作。讓我們使用GregorianCalendar類別將 String 日期和時間轉換為XMLGregorianCalendar :
XMLGregorianCalendar usingGregorianCalendar(String dateTimeAsString) throws DatatypeConfigurationException, ParseException {
GregorianCalendar calendar = new GregorianCalendar();
calendar.setTime(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss").parse(dateTimeAsString));
return DatatypeFactory.newInstance().newXMLGregorianCalendar(calendar);
}
首先,我們建立GregorianCalendar的實例並根據解析的Date.之後,我們使用DatatypeFactory建立XMLGregorianCalendar實例.讓我們測試一下這個方法:
void givenStringDateTime_whenUsingGregorianCalendar_thenConvertToXMLGregorianCalendar() throws DatatypeConfigurationException, ParseException {
XMLGregorianCalendar xmlGregorianCalendar = StringDateToXMLGregorianCalendarConverter.usingGregorianCalendar(dateTimeAsString);
assertEquals(24, xmlGregorianCalendar.getDay());
assertEquals(4, xmlGregorianCalendar.getMonth());
assertEquals(2014, xmlGregorianCalendar.getYear());
assertEquals(15, xmlGregorianCalendar.getHour());
assertEquals(45, xmlGregorianCalendar.getMinute());
assertEquals(30, xmlGregorianCalendar.getSecond());
}
4.3.使用 Joda-Time
Joda-Tim 是一個流行的 Java 日期和時間操作庫,提供了標準 Java 日期和時間 API 的替代方案,具有更直覺的介面。
讓我們探索如何使用 Joda-Tim 將 String 日期和時間轉換為XMLGregorianCalendar :
XMLGregorianCalendar usingJodaTime(String dateTimeAsString) throws DatatypeConfigurationException {
DateTime dateTime = DateTime.parse(dateTimeAsString, DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss"));
return DatatypeFactory.newInstance().newXMLGregorianCalendar(dateTime.toGregorianCalendar());
}
在這裡,我們根據提供的dateTimeAsString值實例化了DatеTimе物件。使用toGregorianCalendar()方法將此dateTime物件轉換為a GregorianCalendar實例。最後,我們使用DatatypeFactory類別的newXMLGregorianCalendar()方法建立了一個XMLGregorianCalendar實例。
讓我們測試一下這個方法:
void givenStringDateTime_whenUsingJodaTime_thenConvertToXMLGregorianCalendar() throws DatatypeConfigurationException {
XMLGregorianCalendar xmlGregorianCalendar = StringDateToXMLGregorianCalendarConverter.usingJodaTime(dateTimeAsString);
assertEquals(24, xmlGregorianCalendar.getDay());
assertEquals(4, xmlGregorianCalendar.getMonth());
assertEquals(2014, xmlGregorianCalendar.getYear());
assertEquals(15, xmlGregorianCalendar.getHour());
assertEquals(45, xmlGregorianCalendar.getMinute());
assertEquals(30, xmlGregorianCalendar.getSecond());
}
5. 結論
在本快速教程中,我們討論了將String日期轉換為XMLGregorianCalendar實例的各種方法。
與往常一樣,本文的完整程式碼範例可以在 GitHub 上找到。