当前位置: 首页 > 面试题库 >

JodaTime-如何知道指定时间段内是否发生夏令时?

吴宝
2023-03-14
问题内容

我需要知道是否由以下时间段定义:

DateTime start;
DateTime end;

内部有一个DST。

我正在遍历{start,end}定义的时间段集合,并在每次迭代中将开始和结束时间提前24小时。结果周期从午夜开始,到下一个午夜之前的1
ms结束。我发现如果该期间在班次内有夏令时,则会产生错误的结果,例如:

具有:

Duration targetDuration = new Duration(24*60*60*1000L-1);
DateTime start = new DateTime("2012-03-10T00:00:00.000-08:00");
DateTime end = new DateTime("2012-03-10T23:59:59.999-08:00");

然后完成转移:

start = end.plusMillis(1);
end = start.plus(targetDuration);

产生:

start = "2012-03-11T00:00:00.000-08:00"
end = "2012-03-12T00:59:59.999-07:00"

我想知道JodaTime中是否有任何标准API可以检查一段时间内是否有DST?


问题答案:

使用DateTimeZone.nextTransition方法。如果开始时间小于结束日期时间,则之间至少发生了一个时区转换。这不考虑规则与DST的更改。也就是说,时区可能具有新的规则,指示标准时间具有新的偏移量,这将显示为时区转换。

if (start.getZone().nextTransition(start.getMillis()) < end.getMillis()) {
    // Time zone transition occurred, possibly due to DST
    ...
}


 类似资料:
  • 使用以下代码: 我得到 有没有办法从夏时制之后到1:00:00而不经过夏时制之前的1:00:00?

  • 夏令时间 选择[标准]或[夏令时间]。

  • 这不起作用: 相反,发生的情况是条件始终等于 1,尽管某些时间戳在白天的保存时间内。 我正在尝试使python调用与基于c的调用的行为相匹配。

  • 问题内容: 不存在。当我将日期和时间设置为此值时,它不会失败。时间设置为一个小时后。如何通知我该时间不存在。这是时间飞逝的方式 如您所见,此日期将永远不存在。 这是我正在使用的代码 问题答案: 您的样本不会抛出异常,因为它会调整日期时间。该javadoc的状态 这将创建一个与输入的本地日期时间尽可能匹配的分区日期时间。夏时制等时区规则意味着,并非每个本地日期时间都对指定时区有效,因此可以调整本地日

  • 问题内容: PDFbox内容流是按页面完成的,但是字段来自于来自目录的表单,该目录来自pdf doc本身。因此,我不确定哪些字段位于哪些页面上,以及导致将文本写到错误的位置/页面上的原因。 即。我正在处理每页的字段,但不确定哪些字段在哪些页面上。 有没有办法告诉哪个字段在哪个页面上?或者,是否有办法只获取当前页面上的字段? 谢谢! 标记 代码段: 问题答案: PDFbox内容流是按页面完成的,但是

  • 轻触方格启用设定,即可将夏令时反映于时间显示中。