Выполняйте итерации каждый месяц с объектами даты

Microsoft имеет статью, описывающую, как Вы можете MSIL Компиляции к Собственному коду

, который можно использовать Ngen.

Собственный Генератор Изображения (Ngen.exe) является инструментом, который улучшает производительность управляемых приложений. Ngen.exe создает собственные изображения, которые являются файлами, содержащими, скомпилировал определенный для процессора машинный код и устанавливает их в собственный кэш изображений на локальном компьютере. Время выполнения может использовать собственные изображения от кэша вместо этого с помощью своевременного (JIT) компилятора для компиляции исходного блока.

, К сожалению, Вам все еще нужны библиотеки от платформы для запущения программы. Нет никакой функции, о которой я знаю с MS.Net SDK платформы, который позволяет Вам компилировать все необходимые файлы в единственный исполняемый файл

19
задан Andrius 12 November 2009 в 19:14
поделиться

2 ответа

Я добавил следующий метод в класс Date:

class Date
  def all_months_until to
    from = self
    from, to = to, from if from > to
    m = Date.new from.year, from.month
    result = []
    while m <= to
      result << m
      m >>= 1
    end

    result
  end
end

Вы используете его как:

>> t = Date.today
=> #<Date: 2009-11-12 (4910295/2,0,2299161)>
>> t.all_months_until(t+100)   
=> [#<Date: 2009-11-01 (4910273/2,0,2299161)>, #<Date: 2009-12-01 (4910333/2,0,2299161)>, #<Date: 2010-01-01 (4910395/2,0,2299161)>, #<Date: 2010-02-01 (4910457/2,0,2299161)>]

Хорошо, итак, более рубиновый подход ИМХО был бы чем-то вроде:

class Month<Date
  def succ
    self >> 1
  end
end

и

>> t = Month.today
=> #<Month: 2009-11-13 (4910297/2,0,2299161)>
>> (t..t+100).to_a
=> [#<Month: 2009-11-13 (4910297/2,0,2299161)>, #<Month: 2009-12-13 (4910357/2,0,2299161)>, #<Month: 2010-01-13 (4910419/2,0,2299161)>, #<Month: 2010-02-13 (4910481/2,0,2299161)>]

Но вам нужно быть осторожным при использовании первых дней месяца (или реализовать такую ​​логику в месяце) ...

10
ответ дан 30 November 2019 в 01:46
поделиться

Я обнаружил, что мне иногда нужно делать это при создании списков избранных месяцев. Ключ - это оператор >> в Date, который продвигает дату вперед на один месяц.

def months_between(start_month, end_month)
  months = []
  ptr = start_month
  while ptr <= end_month do
    months << ptr
    ptr = ptr >> 1
  end
  months
end

results = months_between(Date.new(2008,12), Date.new(2009,3))

Конечно, вы можете отформатировать результаты в цикле, как вам нравится.

months << "#{Date::MONTHNAMES[ptr.month]} #{ptr.year}"

Вернет название месяца. и год («Март 2009») вместо объекта Date. Обратите внимание, что возвращаемые объекты Date будут установлены на 1-е число месяца.

10
ответ дан 30 November 2019 в 01:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: