将DDMON(例如23JAN)日期格式转换为完整日期,并在Ruby中应用正确的年份

时间:2012-05-11 19:18:22

标签: ruby date

我正在寻找一个紧凑的解决方案来转换来自航空公司预订系统(像Sabre / Galileo / Amadeus这样的GDS)的日期 - 例如。 23JUN到标准日期,但需要在Ruby中快速确定年份。 (仅供参考 - 在这些系统日期上,从今天起最多只能延迟355天。因此,如果今天是2012年12月12日,那么将12MAY解释为2013-05-12而不是2012-05-12并不存在歧义。如果今天是2012年12月25日,日期输入01JAN,将来是01JAN2013,如果今天是2012年7月21日,01JAN的输入日期也将变为01JAN 2013,因为它是当年的过去日期。 / p>

所以我可以这样做:

t = DateTime.now
crsdate = DateTime.strptime("23JAN","%d%b")

if crsdate >= t
  # Year is current year
else
  # Year is next year
end

有更优雅的方式吗?

1 个答案:

答案 0 :(得分:1)

这个怎么样?

t = DateTime.now
crsdate = DateTime.strptime("23JAN","%d%b")
crsdate >= t ? crsdate >>= 12 : crsdate

如果您不想修改crsdate,因为您只想返回此内容,请使用>>代替>>=