Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.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将本地时间转换为DST更少的时间-在切换小时内具有连续性_Java_Date_Timezone_Gregorian Calendar - Fatal编程技术网

Java将本地时间转换为DST更少的时间-在切换小时内具有连续性

Java将本地时间转换为DST更少的时间-在切换小时内具有连续性,java,date,timezone,gregorian-calendar,Java,Date,Timezone,Gregorian Calendar,我们有一个问题,我们正在接收一个用本地时间定义的时间对象——DST。 现在,我们将接收时间存储在数据库中,作为无DST时区。 每年我们有一个小时的转换不正确: 凌晨2:00时,时钟将在输入DST时区设置为凌晨1:00(切换到冬季时间)。 我们在当地时间(即格林尼治标准时间)将其改为凌晨2点。 凌晨2点15分,我们收到一个数据包,我们再次更正到2点15分。但现在是2:15,而不是1:15。 原则上,我们现在在系统中的时间增加了一倍。java公历无法在计算当前本地tim的时区之间转换(以确定是否必须

我们有一个问题,我们正在接收一个用本地时间定义的时间对象——DST。 现在,我们将接收时间存储在数据库中,作为无DST时区。 每年我们有一个小时的转换不正确: 凌晨2:00时,时钟将在输入DST时区设置为凌晨1:00(切换到冬季时间)。 我们在当地时间(即格林尼治标准时间)将其改为凌晨2点。 凌晨2点15分,我们收到一个数据包,我们再次更正到2点15分。但现在是2:15,而不是1:15。 原则上,我们现在在系统中的时间增加了一倍。java公历无法在计算当前本地tim的时区之间转换(以确定是否必须考虑双倍小时)

以下是我将输入的DST时区转换为非DST时区的代码:

public static GregorianCalendar getCal(XMLGregorianCalendar c)
{

    GregorianCalendar toGregorianCalendar = c.toGregorianCalendar();
    TimeZone tz = TimeZone.getTimeZone("GMT+1");

    toGregorianCalendar.setTimeZone(tz);
    toGregorianCalendar.setTimeZone(TimeZone.getTimeZone("Europe/Berlin"));

    return toGregorianCalendar;
}
这似乎一年四季都能正常工作-除了只有一个小时切换回冬季时间。。。
你知道这个令人心神不宁的问题吗?

我不明白这个问题。将时间存储为GTM/UTC是明智之举。这与原始时区中的时间有关系吗?这听起来像是输入不明确的问题,而不是代码问题。有两个不同的时间点都被称为1:15,如果输入没有指定它是指哪一个,那么代码就没有可靠的方法来计算它。也许这一点会有帮助: