在 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 上找到。