如何在Ruby中获取未来最近的半小时整点时间
获取下一个半小时整点时间的Ruby实现
先看场景:我们先获取当前时间并加上60分钟,代码示例如下:
Time.now + 1.hours # => 2022-11-01 16:47:02.965861 +0500
需求是得到下一个半小时整点时间,比如示例中的17:00:00。目前已经能通过以下代码获取前一个半小时整点时间,但不知道怎么实现下一个:
time = Time.now - 30.minutes # => 2022-11-01 15:22:59.942013 +0500 Time.at((time.to_time.to_i/1800).round * 1800).to_datetime # => Tue, 01 Nov 2022 15:00:00 +0500
解决方案
要获取下一个半小时整点,只需要把代码中的round替换为ceil(向上取整),并且直接基于目标时间处理即可,不需要提前减去30分钟:
# 先定义目标时间(当前时间+60分钟) target_time = Time.now + 1.hours # 计算下一个半小时整点 next_half_hour = Time.at((target_time.to_i / 1800.0).ceil * 1800).to_datetime # 示例输出 => Tue, 01 Nov 2022 17:00:00 +0500
原理说明:
- 1800是30分钟对应的秒数,把时间戳除以1800得到对应的30分钟间隔数
- 使用
ceil会将这个间隔数向上取整,再乘以1800就得到了下一个半小时整点的时间戳 - 最后转换为datetime格式即可得到目标时间
内容的提问来源于stack exchange,提问作者Rq Bhatti
相关产品推荐
相关产品推荐

