Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.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 “每天的第几小时”;小时结束“;转换为日期时间值_Java_Sql_Datetime_Jodatime_Java Time - Fatal编程技术网

Java “每天的第几小时”;小时结束“;转换为日期时间值

Java “每天的第几小时”;小时结束“;转换为日期时间值,java,sql,datetime,jodatime,java-time,Java,Sql,Datetime,Jodatime,Java Time,一些企业通过“小时结束”来及时跟踪事件。一天中的每个小时都由序号表示: UTC为1…24 1…23、1…24和1…25适用于具有一小时夏令时(DST)调整的时区 所以一天中的第一个小时,从午夜到01:00,是以01结束的小时 对我来说,这似乎是一种追踪时间的愚蠢方式。更明智的做法是采用半开放式的方法,即开始是包含的,结束是独占的。因此: 2014-12-05T01:00:00.000将标记小时结束01 2014-12-06T00:00:00.000(午夜)将标志着24小时结束 事实上,这

一些企业通过“小时结束”来及时跟踪事件。一天中的每个小时都由序号表示:

  • UTC为1…24
  • 1…23、1…24和1…25适用于具有一小时夏令时(DST)调整的时区
所以一天中的第一个小时,从午夜到01:00,是以01结束的
小时

对我来说,这似乎是一种追踪时间的愚蠢方式。更明智的做法是采用半开放式的方法,即开始是包含的,结束是独占的。因此:

  • 2014-12-05T01:00:00.000
    将标记
    小时结束01
  • 2014-12-06T00:00:00.000
    (午夜)将标志着
    24小时结束
事实上,这就是我想要存储在数据库()中的内容,一个从日期和序号转换而来的值。所以我的问题是:

给定一个日期和顺序“小时结束”数字(1…23/24/25表示1小时DST的位置),如何转换为日期时间值

我对和很熟悉。它们都提供了转换方法吗?如果没有,什么样的算法同时处理序数转换和DST


或者我不应该反对这一点,而只是将本地日期存储为带有序号后缀的字符串?

也许您正在寻找的
java.time
方法是,它可以用于获取任何
ZoneDateTime
并截断分和秒

ZonedDateTime zdt = ZonedDateTime.now();
ZonedDateTime rounded = zdt.truncatedTo(ChronoUnit.HOURS);
ZonedDateTime hourEnd = rounded.plusHours(1);

实际上,您不需要java.time或Joda来完成此任务。您能否只使用普通的
日历
对象,设置日期、月份和年份,将其设置为午夜,然后添加正确的小时数?这将在夏令时开始和结束时起作用。@DavidWallace作为一项策略,我可以避免java.util.Date/.Calendar的混乱。但是您的idea似乎听起来非常简单。Joda Time有一种方法
with timeatstartofDay
来获取一天中的第一个时刻。这种方法
plusHours
可以使用“小时结束”得出日期-时间值的数字。对于从日期+小时数到日期-时间的转换,这应该有效。换一种方式,我不确定。换一种方式,您只需计算给定时间与当天午夜之间的小时差。