Java 如何向日历对象添加一天,并同时考虑夏令时?

Java 如何向日历对象添加一天,并同时考虑夏令时?,java,date,datetime,dst,Java,Date,Datetime,Dst,我正在尝试为列表中的对象创建时间限制。这可能意味着物品的保质期可能是23、24或25小时。有没有有用的Java库?这就是我目前所拥有的 我的问题是,当我在上午9:30创建一个记录时,它必须在第二天上午9:30删除。在DST生效期间,我会收到差异。记录在8:30或10:30被删除,这取决于我是向前还是向后弹出 //baseValue = object that I want to check Date dt = new Date(); Calendar c = Calendar.getInsta

我正在尝试为列表中的对象创建时间限制。这可能意味着物品的保质期可能是23、24或25小时。有没有有用的Java库?这就是我目前所拥有的

我的问题是,当我在上午9:30创建一个记录时,它必须在第二天上午9:30删除。在DST生效期间,我会收到差异。记录在8:30或10:30被删除,这取决于我是向前还是向后弹出

//baseValue = object that I want to check

Date dt = new Date();
Calendar c = Calendar.getInstance(); 
c.setTime(dt); 
c.add(Calendar.DATE, -1);

if(baseValue.getTime() < c.getTime()){
    array.remove(baseValue);
}
//baseValue=我要检查的对象
日期dt=新日期();
Calendar c=Calendar.getInstance();
c、 设定时间(dt);
c、 添加(Calendar.DATE,-1);
if(baseValue.getTime()
旧类(
日期
日历
简单格式
)具有和,包括难以处理DST更改,并且它们正在被新的API所取代

如果使用<强> java 8 < />,请考虑使用这更容易

如果您使用的是Java旧类(
Date
Calendar
SimpleDateFormat
)具有和,包括难以处理DST更改,它们正在被新的API所取代

如果使用<强> java 8 < />,请考虑使用这更容易


如果你使用的是Java,这篇文章需要一些你已经尝试过的代码,或者至少需要一些针对这个问题的代码设置。很抱歉。如果你使用的是Java 8,我建议你使用新的时态框架(即ZoneDateTime),它提供了你所需要的一切。你的代码能胜任吗?如果没有,期望的行为和观察到的行为之间到底有什么区别?嗨,我已经更新了这个问题。谢谢。这篇文章需要一些你已经尝试过的代码,或者至少需要一些针对这个问题的代码设置。很抱歉。如果你使用的是java 8,我建议你使用新的时态框架(即ZonedDateTime),它提供了你所需的一切。你的代码能完成这项工作吗?如果没有,期望的行为和观察到的行为之间到底有什么区别?嗨,我已经更新了这个问题。谢谢。@Calvinraventhran不客气。如果你觉得这个答案很有用并且解决了你的问题,你可以接受和/或投票:我没有足够的声誉,因为我刚刚加入。但当我这样做的时候,我肯定会重温。@Calvinraventhran实际上你可以接受,因为这是你的问题。默认情况下,所有用户都可以接受他们自己的问题,不管他们的声誉如何:(实际上,提出问题的用户是唯一可以接受的用户)。@calvinraventhran不客气。如果你觉得这个答案很有用并且解决了你的问题,你可以接受和/或投票:我没有足够的声誉,因为我刚刚加入。但当我这样做的时候,我肯定会重温。@Calvinraventhran实际上你可以接受,因为这是你的问题。默认情况下,所有用户都可以接受自己的问题,而不管他们的声誉如何:(实际上,提出问题的用户是唯一可以接受问题的用户)。
// create a date 1 day before DST change in Sao Paulo, at 9 AM
ZoneId zone = ZoneId.of("America/Sao_Paulo");
ZonedDateTime z = ZonedDateTime.of(2017, 10, 14, 9, 0, 0, 0, zone);

// get the next day, at 9 AM
ZonedDateTime nextDay = z.plusDays(1);

System.out.println(z);
System.out.println(nextDay);
System.out.println(ChronoUnit.HOURS.between(z, nextDay));
long days = ChronoUnit.DAYS.between(z, nextDay);