Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在XMLGregorianCalendar中设置带区域的时间戳_Java_Utc_Timestamp With Timezone_Xmlgregoriancalendar - Fatal编程技术网

Java 如何在XMLGregorianCalendar中设置带区域的时间戳

Java 如何在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

我已使用此格式的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: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的更多信息,请访问