Bug #9836 ยป time-strptime.patch
| lib/time.rb | ||
|---|---|---|
| 
         LeapYearMonthDays = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] # :nodoc: 
   | 
||
| 
         CommonYearMonthDays = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] # :nodoc: 
   | 
||
| 
         def month_days(y, m) 
   | 
||
| 
         def month_days_of_year(y) 
   | 
||
| 
           if ((y % 4 == 0) && (y % 100 != 0)) || (y % 400 == 0) 
   | 
||
| 
             LeapYearMonthDays[m-1] 
   | 
||
| 
             LeapYearMonthDays 
   | 
||
| 
           else 
   | 
||
| 
             CommonYearMonthDays[m-1] 
   | 
||
| 
             CommonYearMonthDays 
   | 
||
| 
           end 
   | 
||
| 
         end 
   | 
||
| 
         private :month_days 
   | 
||
| 
         private :month_days_of_year 
   | 
||
| 
         def month_days(y, m) 
   | 
||
| 
           month_days_of_year(y)[m-1] 
   | 
||
| 
         end 
   | 
||
| 
         def apply_offset(year, mon, day, hour, min, sec, off) 
   | 
||
| 
           if off < 0 
   | 
||
| ... | ... | |
| 
           else 
   | 
||
| 
             year = d[:year] 
   | 
||
| 
             year = yield(year) if year && block_given? 
   | 
||
| 
             t = make_time(date, year, d[:yday], d[:mon], d[:mday], d[:hour], d[:min], d[:sec], d[:sec_fraction], d[:zone], now) 
   | 
||
| 
             mon = d[:mon] 
   | 
||
| 
             mday = d[:mday] 
   | 
||
| 
             unless mon and mday 
   | 
||
| 
               case 
   | 
||
| 
               when (w = d[:wnum0])  # %U 
   | 
||
| 
                 range = 0..53 
   | 
||
| 
                 mday = +1 
   | 
||
| 
               when (w = d[:wnum1])  # %W 
   | 
||
| 
                 range = 0..53 
   | 
||
| 
                 mday = +2 
   | 
||
| 
               when (w = d[:cweek])  # %V 
   | 
||
| 
                 range = 1..53 
   | 
||
| 
                 mday = -6 
   | 
||
| 
               end 
   | 
||
| 
               if mday 
   | 
||
| 
                 raise ArgumentError, "invalid date" unless range.cover?(w) 
   | 
||
| 
                 t = make_time(date, year, nil, 1, 1, nil, nil, nil, nil, d[:zone], now) 
   | 
||
| 
                 mday += w * 7 - t.wday 
   | 
||
| 
                 if w = d[:wday] || d[:cwday] 
   | 
||
| 
                   mday += w 
   | 
||
| 
                 end 
   | 
||
| 
                 month_days_of_year(t.year).each_with_index do |n, m| 
   | 
||
| 
                   break mon = m+1 if mday <= n 
   | 
||
| 
                   mday -= n 
   | 
||
| 
                 end 
   | 
||
| 
               end 
   | 
||
| 
             end 
   | 
||
| 
             t = make_time(date, year, d[:yday], mon, mday, d[:hour], d[:min], d[:sec], d[:sec_fraction], d[:zone], now) 
   | 
||
| 
           end 
   | 
||
| 
           t 
   | 
||
| 
         end 
   | 
||