Различие между DateTime и время в Ruby

. СЕТЬ супер легко декомпилировать. Путаница сделает его немного тяжелее для понимания то, что продолжается, но кто-то декомпилирующий код может все еще понять его, если они являются персистентными.

Вот некоторый совет относительно защиты Вашего кода.NET, который я нашел онлайн:

http://blogs.msdn.com/ericgu/archive/2004/02/24/79236.aspx

Просто примечание, что ни один из обсужденных методов не является на 100% эффективным, его просто вопрос того, сколько обручей Вы заставите взломщика перейти через.

216
задан Arturo Herrero 25 May 2018 в 01:55
поделиться

3 ответа

Новые версии Ruby (2.0+) действительно не имеют значительных различий между двумя классами. Некоторые библиотеки будут использовать один или другой по историческим причинам, но новый код не обязательно должен беспокоить. Вероятно, лучше всего выбрать один для согласованности, поэтому попробуйте совместить с тем, что ожидают ваши библиотеки. Например, ActiveRecord предпочитает DateTime.

В версиях до Ruby 1.9 и во многих системах время представлено как 32-битное значение со знаком, описывающее количество секунд с 1 января 1970 года по всемирному координированному времени, тонкая оболочка вокруг стандарта POSIX. time_t значение и ограничено:

Time.at(0x7FFFFFFF)
# => Mon Jan 18 22:14:07 -0500 2038
Time.at(-0x7FFFFFFF)
# => Fri Dec 13 15:45:53 -0500 1901

Новые версии Ruby могут обрабатывать большие значения без ошибок.

DateTime - это подход на основе календаря, где год, месяц, день, час, минуты и секунды сохраняются отдельно. Это конструкция Ruby on Rails, которая служит оболочкой для полей DATETIME стандарта SQL. Они содержат произвольные даты и могут представлять практически любой момент времени, поскольку диапазон выражений обычно очень велик.

DateTime.new
# => Mon, 01 Jan -4712 00:00:00 +0000

Так что обнадеживает то, что DateTime может обрабатывать сообщения в блогах от Аристотеля.

При выборе одного различия теперь несколько субъективны. . Исторически DateTime предоставлял лучшие возможности для управления им в календарном режиме, но многие из этих методов также были перенесены в Time, по крайней мере, в среде Rails.

При выборе одного различия теперь несколько субъективны. Исторически DateTime предоставлял лучшие возможности для управления им в календарном режиме, но многие из этих методов также были перенесены в Time, по крайней мере, в среде Rails.

При выборе одного различия теперь несколько субъективны. Исторически DateTime предоставлял лучшие возможности для управления им в календарном режиме, но многие из этих методов также были перенесены в Time, по крайней мере, в среде Rails.

176
ответ дан 23 November 2019 в 04:18
поделиться

Я думаю, что ответ на вопрос «в чем разница?» - один из неудачных распространенных ответов на этот вопрос в Ruby стандартные библиотеки: два класса / библиотеки были созданы разными людьми в разное время по-разному. Это одно из прискорбных последствий общности эволюции Ruby по сравнению с тщательно спланированной разработкой чего-то вроде Java. Разработчики хотят новой функциональности, но не хотят наступать на существующие API, поэтому они просто создают новый класс - для конечного пользователя нет очевидной причины для существования двух.

Это верно для программных библиотек в целом: часто Причина, по которой какой-то код или API таков, оказывается скорее исторической, чем логической.

Возникает соблазн начать с DateTime, потому что он кажется более общим. Дата ... и время, верно? Неправильно. Время также лучше работает с датами и фактически может анализировать часовые пояса, а DateTime не может. Кроме того, он работает лучше.

В итоге я стал использовать Time везде.

Однако, чтобы быть в безопасности, я предпочитаю передавать аргументы DateTime в мои API Timey и либо конвертировать. Кроме того, если я знаю, что у обоих есть интересующий меня метод, я принимаю его, например, этот метод, который я написал для преобразования времени в XML (для файлов XMLTV)

# Will take a date time as a string or as a Time or DateTime object and
# format it appropriately for xmtlv. 
# For example, the 22nd of August, 2006 at 20 past midnight in the British Summertime
# timezone (i.e. GMT plus one hour for DST) gives: "20060822002000 +0100"
def self.format_date_time(date_time)
  if (date_time.respond_to?(:rfc822)) then
    return format_time(date_time)
  else 
    time = Time.parse(date_time.to_s)
    return format_time(time)
  end    
end

# Note must use a Time, not a String, nor a DateTime, nor Date.
# see format_date_time for the more general version
def self.format_time(time)
  # The timezone feature of DateTime doesn't work with parsed times for some reason
  # and the timezone of Time is verbose like "GMT Daylight Saving Time", so the only
  # way I've discovered of getting the timezone in the form "+0100" is to use 
  # Time.rfc822 and look at the last five chars
  return "#{time.strftime( '%Y%m%d%H%M%S' )} #{time.rfc822[-5..-1]}"
end
43
ответ дан 23 November 2019 в 04:18
поделиться

Устарело! См. Ниже ...

Невозможно переоценить разницу в производительности ... Время - это C, а DateTime - Ruby:

>> Benchmark.bm do |bm|
?>   bm.report('DateTime:') do
?>     n1 = DateTime.now
>>     n2 = DateTime.now
>>     1_000_000.times{ n1 < n2 }
>>   end
>>   bm.report('Time:    ') do
?>     n1 = Time.now
>>     n2 = Time.now
>>     1_000_000.times{ n1 < n2 }
>>   end
>> end
      user     system      total        real
DateTime:  4.980000   0.020000   5.000000 (  5.063963)
Time:      0.330000   0.000000   0.330000 (  0.335913)

Обновление (2/2012):

Как уже упоминалось в комментарии, 1.9 .3 значительно улучшил производительность DateTime :

       user     system      total        real
DateTime:  0.330000   0.000000   0.330000 (  0.333869)
Time:      0.300000   0.000000   0.300000 (  0.306444)
66
ответ дан 23 November 2019 в 04:18
поделиться
Другие вопросы по тегам:

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