2016-03-11 43 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表示一年中的一天。