2012-05-11 36 views
0

我正在尋找一種緊湊的解決方案,用於轉換來自不具備的航空公司預訂系統(GDS,如Sabre/Galileo/Amadeus)的日期這一年 - 例如。 23JUN到標準日期,但需要快速確定一年來在Ruby中加以解決。 (僅供參考 - 在這些系統上的日期只能距離今天最多355天。因此,2012年12月12日假設12MAY作爲2013-05-12而不是2012-05-12)沒有任何歧義。如果今天是2012年12月25日,並且日期輸入爲01JAN,則未來將爲01JAN2013,如果今天是2012年7月21日,則01JAN的輸入日期也將變爲2013年1月1日,因爲它是當年的過去日期。將DDMON(如23JAN)日期格式轉換爲完整日期,並在Ruby中應用正確的年份

所以我可以這樣做:

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

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

是否有這樣做的更優雅的方式?

回答

1

這個怎麼樣?

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

如果您不需要修改crsdate因爲你只是想回到這一點,使用>>代替>>=

+0

Activesupport有類似'過去?和未來?'的FWIW。 – steenslag

+0

我知道,但沒有Rails標籤,所以我給了一個純Ruby的答案。 –

+0

感謝Michael和steenslag - 這實際上是2.3.5中實現datanoise webservice api的控制器中代碼的一部分。好奇如何使用過去? - 我仍然是一名鐵桿新手。 – Surge

相關問題