2016-03-11 79 views
1

需要轉換「15307」中類似「2015年11月3日」轉換一年一年的天壓延日期紅寶石

我有以下代碼

def juliantoregular(date1) 
    temp = "20" + date1[0,2]; 
    year = temp.to_i;   
    if date1[2,1] == "0"  
     temp1 = date1[3,2]; 
    else 
     temp1 = date1[2,3]; 
    end 
    juliannumber = temp1.to_i; 
    date1 = Date.ordinal(year,juliannumber) 
    return date1; 
end 

輸入代碼是字符串「15307」有沒有更好的方法來做到這一點?

回答

0
y, d = "15307".to_i.divmod 1_000  #⇒ [15, 307] 
Date.parse("20#{y}-01-01") + (d - 1) #⇒ add days to Jan, 1st 
#⇒ #<Date: 2015-11-03 ((2457330j,0s,0n),+0s,2299161j)> 
+0

'Date.parse(「20#{Y} -01-01」)似乎是構建該日期的昂貴方式。爲什麼不'Date.new(2000 + y)'? –

+0

@Jordan確實。然而,你的方式更好。 upvoted。 – mudasobwa

3

Date.strptime非常適合這樣的:

str = "15307" 
puts Date.strptime(str, "%y%j") 
# => 2015-11-03 

格式字符串"%y%j"%y表示兩位數的年份和%j表示一年中的一天。