如何在Ruby的Date对象中添加自定义时间字符串?
解决方案:将时间添加到Ruby的Date对象中
Ruby的Date类仅存储日期信息,不包含时间部分。要实现将时间戳添加到日期中,你需要把Date转换为DateTime或Time对象,这两个类支持完整的日期时间存储。
方法一:使用DateTime类(推荐)
直接拼接日期和时间字符串,再解析为DateTime对象,是最简洁的方式:
require 'date' sd = Date.parse('2016-01-01') z = "4:00am" # 拼接日期与时间字符串,解析为完整的DateTime full_datetime = DateTime.parse("#{sd} #{z}") puts full_datetime # 输出:2016-01-01T04:00:00+00:00
如果需要分步操作(比如单独处理时间间隔),可以这样做:
require 'date' sd = Date.parse('2016-01-01') z = "4:00am" # 将Date转为午夜时间的DateTime base_dt = sd.to_datetime # 计算目标时间与午夜的时间差 time_offset = DateTime.parse(z) - DateTime.parse('00:00') # 合并得到完整日期时间 full_datetime = base_dt + time_offset
方法二:使用Time类
如果需要得到Time类型的结果,可以通过时间戳计算实现:
sd = Date.parse('2016-01-01') z = "4:00am" # 将Date转为午夜时间的Time对象 base_time = sd.to_time # 解析时间字符串中的时、分和上下午标识 matches = z.match(/(\d+):(\d+)(am|pm)/) hours = matches[1].to_i minutes = matches[2].to_i period = matches[3].downcase # 转换为24小时制 hours += 12 if period == 'pm' && hours != 12 hours -= 12 if period == 'am' && hours == 12 # 计算并得到最终时间 full_time = base_time + hours*3600 + minutes*60 puts full_time # 输出:2016-01-01 04:00:00 +0800(时区取决于本地设置)
内容的提问来源于stack exchange,提问作者junkone
相关产品推荐
相关产品推荐

