import javax.xml.datatype.DatatypeConfigurationException;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;
public class Main {
public static void main(String[] args) throws DatatypeConfigurationException {
String givenDateTimeString = "2020-11-08T13:05:46.000-07:00";
XMLGregorianCalendar xmlGregorianCalendar = DatatypeFactory.newInstance()
.newXMLGregorianCalendar(givenDateTimeString);
System.out.println(xmlGregorianCalendar);
}
}
输出:
2020-11-08T13:05:46.000-07:00
但是,我建议您切换到现代日期时间api。 使用现代日期时间api:
import java.time.OffsetDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
public class Main {
public static void main(String[] args) {
String givenDateTimeString = "2020-11-08T13:05:46.000-07:00";
OffsetDateTime odt = OffsetDateTime.parse(givenDateTimeString);
// Default format i.e. OffsetDateTime#toString
System.out.println(odt);
// Custom format
System.out.println(odt.format(DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ss.SSSXXX", Locale.ENGLISH)));
// Convert it to date-time at UTC
OffsetDateTime odtUTC = odt.withOffsetSameInstant(ZoneOffset.UTC);
System.out.println(odtUTC);
System.out.println(odtUTC.format(DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ss.SSSX", Locale.ENGLISH)));
}
}
2条答案
按热度按时间weylhg0b1#
热释光;博士
java.time文件
XMLGregorianCalendar
是一个遗留类,多年前被ZonedDateTime
.您的输入没有时区,只有与utc的偏移量。所以把这个字符串作为
OffsetDateTime
.调整为utc(零小时分秒的偏移量)的最简单方法是提取
Instant
.eeq64g8w2#
您可以按以下步骤进行:
输出:
但是,我建议您切换到现代日期时间api。
使用现代日期时间api:
输出:
在trail:date-time了解有关现代日期时间api的更多信息。