本地日期和服务器java日期时间不同

问题描述 投票:0回答:1

当我运行下面的代码将 xml 日期转换为 java 日期时,它在本地打印不同的值(CST),在运行相同代码的服务器中打印不同的值(UTC),这可能是什么原因?我怎样才能始终以 CST 格式打印我在本地获得的日期。

    import javax.xml.datatype.DatatypeConstants;
import javax.xml.datatype.XMLGregorianCalendar;
import java.util.Date;
import java.util.TimeZone;

import javax.xml.datatype.DatatypeConstants;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;
import java.util.Date;
import java.util.TimeZone;

public class Demo {
    public static final TimeZone TIMEZONE = TimeZone.getTimeZone("America/Chicago");

    public static Date convertDate(XMLGregorianCalendar value) {
        if (value == null) {
            return null;
        } else {
            if (value.getXMLSchemaType() == DatatypeConstants.DATE) {
                return value.toGregorianCalendar().getTime();
            } else {
                return value.toGregorianCalendar(TIMEZONE, null, null).getTime();
            }
        }
    }

    public static void main(String[] args) {
        try {
            // Parse the XML date string into XMLGregorianCalendar
            XMLGregorianCalendar xmlDate = DatatypeFactory.newInstance().newXMLGregorianCalendar("2024-02-09T01:57:33.240-06:00");
            // Convert XMLGregorianCalendar to Date
            Date date = convertDate(xmlDate);
            // Print the result
            System.out.println("Date: " + date);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

日期:2024 年 2 月 9 日星期五 01:57:33 CST - 本地输出(Intellij - 我的 mac 时区 CST)

日期:2024 年 2 月 9 日星期五 07:57:33 GMT - 服务器输出(https://www.jdoodle.com/online-java-compiler)

java date datetime gregorian-calendar xmlgregoriancalendar
1个回答
0
投票

您正在使用有严重缺陷的日期时间类,但现在已成为遗留问题。它们几年前就被 JSR 310 中定义的现代 java.time 类所取代。

它的众多缺陷之一是

java.util.Date#toString
对你撒谎。该方法插入 JVM 当前的默认时区,同时生成文本来表示对象的 UTC 值。

当收到

XMLGregorianCalendar
物体时,立即通过
java.time.ZonedDateTime
转换为现代替代品
java.util.GregorianCalendar

ZonedDateTime zdt = myXGregCal.toGregorianCalendar().toZonedDateTime() ;
© www.soinside.com 2019 - 2024. All rights reserved.