|
|
1
2
我已经给了 answer 是的。但已经给出的答案相当复杂。我想他们不容易理解。所以我对这些答案不满意,想知道是否有一个简单的解决方案,容易理解。 我想,我找到了一个方法是定义日期时间 范围 (如OP所述)并在其单元上流动并过滤适当的单元。
这是我的
这是改编的
作为
虽然更容易理解这个解决方案,但速度不会像前面提到的那样快。我认为,只要多年来没有人能达到纳米精度,这应该是可以接受的;) 我的资源链接:
|
|
|
2
3
在错误地认为这个问题是重复的之后,@luiz纠正了我。我的道歉来了。
计算
编辑:
这是我的解决方案:
主要的挑战是应对白天
时间从
是在
时间到了
是的。在这个问题中给出了一个例子:从22到5。
我在链接测试类中讨论了这些和许多其他情况。我花了一些时间才使它适用于所有的测试用例。所以我希望它能为某个人服务。 |
|
|
3
2
为了理解这个解决方案,您应该熟悉位字段和位掩码如果没有,请考虑研究。 下面是一个简单的例子:
使用此方法,可以将一天中的实际小时显示为位字段,将所需小时显示为位掩码。 我们的24位掩码(24小时)从晚上22点到早上5点将如下所示(msb last):
十六进制表示
编辑:我的最后一个方法在计算某些范围内的日历日与小时时被窃听了。结果我不得不把问题归结为一个矩阵来识别一个模式。
目标是创建一个
有三个条件决定对日历日应用位掩码时是否需要忽略它:
这将计算24位掩码范围内的小时数,并考虑可能的DST:
如果还要检查分钟,可以添加以下行:
或秒:
快速单元测试:
|
|
4
1
tl;博士
额外310 项目似乎其他的答案是试图重新创建已经编写好的类。见 额外310 为将功能添加到 java.time公司 Java 8及更高版本中内置的框架。
具体来说,我们可以使用
从你的两个输入开始,日期和时间。将这些解析为
一个
所以指定一个时区,一个
指定
proper time zone name
格式为
使用
你的参照系是我们在指定时区的时间间隔。所以提取
我们将按日期循环,一次递增一天因此,将该日期复制到递增变量中。
指定我们的目标时间对。
建立一个
循环每个日期,直到输入间隔结束。
逐个记录每个日期,并应用我们的目标时间值来确定时区中的某个时刻。
其核心目的
当我们对给定的日期和时间应用时区时,如果该区域中该日期的该时间无效(例如夏令时DST转换),则
把我们的目标时间间隔一下,我们的目标
测试目标间隔是否与输入间隔重叠当然,根据我们问题的定义,我们希望一开始就是这样但最后,在最后一天,情况可能并非如此在最后一天,我们的输入间隔可能在一天中的下一个目标时间之前结束。事实上,这正是我们在问题中的投入所看到的情况(见下文)。
使用
将生成的交叉点间隔存储在地图中,并指定给循环的日期。
完成了业务逻辑。现在我们可以报告结果了。
我们使用
为了按时间顺序建立报告循环,我们必须做一些额外的工作这个
报告所有交叉路口间隔中包含的总时间这个
为了方便起见,让我们在一个块中再次看到相同的代码。
当运行时,我们得到这个输出我们:
关于 java.time公司
这个
java.time
框架构建在Java8和更高版本中这些类取代了麻烦的旧类
legacy
日期时间类,如
这个 Joda-Time 项目,现在在 maintenance mode ,建议迁移到 java.time 上课。 要了解更多信息,请参阅 Oracle Tutorial . 和搜索堆栈溢出的许多例子和解释。规格是 JSR 310 是的。
你可以交换
java.time公司
直接使用数据库的对象。使用
JDBC driver
符合
JDBC 4.2
或者以后不需要弦,不需要
在哪里获得java.time类?
这个
ThreeTen-Extra
project使用其他类扩展java.time这个项目是将来可能添加java.time的一个试验场。你可以在这里找到一些有用的类,比如
|
|
|
5
-1
我试过这个:
按预期工作 输出:24小时 或者你可以选择joda,上面的代码如下:
|
|
|
malife89 · 将java中的字符串读取为正确的日期格式 1 年前 |
|
|
Jas Mahay · 使用日期和日历:需要社区帮助来提高工作表的效率 1 年前 |
|
|
ViSa · 如何从Pandas的列中提取日期? 1 年前 |
|
|
Wolfspirit · 你如何确定一个时间点是否在一个时间段内? 1 年前 |
|
Steven · Python的美国/纽约时间偏移显示-04:56 1 年前 |