Java 如何在XMLGregorianCalendar中设置带区域的时间戳
我已使用此格式的DateTimeJava 如何在XMLGregorianCalendar中设置带区域的时间戳,java,utc,timestamp-with-timezone,xmlgregoriancalendar,Java,Utc,Timestamp With Timezone,Xmlgregoriancalendar,我已使用此格式的DateTime'2020-11-08T13:05:46.000-07:00'并尝试将其设置为xmlgoriiancalendar。它会自动转换为2020-11-08T20:05:46.000+0000 是否仍要将其保存为UTC?tl;博士 java.time XMLGregorianCalendar是一个遗留类,多年前被ZoneDateTime取代 OffsetDateTime odt = OffsetDateTime.parse( "2020-11-08T13:05
'2020-11-08T13:05:46.000-07:00'
并尝试将其设置为xmlgoriiancalendar
。它会自动转换为2020-11-08T20:05:46.000+0000
是否仍要将其保存为UTC?tl;博士
java.time
XMLGregorianCalendar
是一个遗留类,多年前被ZoneDateTime
取代
OffsetDateTime odt = OffsetDateTime.parse( "2020-11-08T13:05:46.000-07:00" ) ;
您的输入没有时区,只有与UTC的偏移量。因此,将该字符串解析为OffsetDateTime
OffsetDateTime odt = OffsetDateTime.parse( "2020-11-08T13:05:46.000-07:00" ) ;
调整到UTC(零小时分秒的偏移量)的最简单方法是提取一个瞬间
Instant instant = odt.toInstant() ;
您可以按如下方式进行操作:
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
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)));
}
}
2020-11-08T13:05:46-07:00
2020-11-08T13:05:46.000-07:00
2020-11-08T20:05:46Z
2020-11-08T20:05:46.000Z
不过,我建议你换成新的
使用现代日期时间API:
2020-11-08T13:05:46.000-07:00
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)));
}
}
2020-11-08T13:05:46-07:00
2020-11-08T13:05:46.000-07:00
2020-11-08T20:05:46Z
2020-11-08T20:05:46.000Z
输出:
2020-11-08T13:05:46.000-07:00
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)));
}
}
2020-11-08T13:05:46-07:00
2020-11-08T13:05:46.000-07:00
2020-11-08T20:05:46Z
2020-11-08T20:05:46.000Z
有关现代日期时间API的更多信息,请访问