Во-первых: на самом деле, defined?
Второй оператор .
: если я понимаю Ваш вопрос правильно, способ сделать это с этой идиомой Ruby:
perex ||= true
Это присвоится верный для perex
, если это будет не определено или nil
. Это не точно, что делает Ваш пример, так как Ваш не оценивает присвоение, когда значение nil
, но если Вы полагаетесь на это тогда, по-моему, не видя его, Вы не пишете код разъединения.
Редактирование : Как отмеченный Honza, оператор выше заменит значение perex
, когда это будет false
. Тогда я предлагаю следующее для перезаписи минимального количества строк:
perex ||= perex.nil? # Assign true only when perex is undefined or nil
Не могли бы вы просто используйте DateTime.UtcNow и конвертируйте только в местное время, когда данные представлены? Вы уже определили, что DateTime.UtcNow намного быстрее и устранит любую двусмысленность в отношении летнего времени.
Чтобы ответить в обратном порядке:
2) Я не могу придумать более быстрого способа.
1) Стоит проверить, есть ли в конвейере какие-либо улучшения инфраструктуры, такие как они только что объявили для System.IO
Трудно быть уверенным в безопасности, но это то, что требует множества модульных тестов. На ум приходит переход на летнее время. Системный, очевидно, очень закален в боях, а ваш - нет.
Одно различие между результатом
DateTime.Now
и
DateTime.UtcNow + LocalUtcOffset
заключается в значении свойства Kind - Local vs Utc соответственно. Если полученный DateTime передается в стороннюю библиотеку, рассмотрите возможность возврата
DateTime.SpecifyKind(DateTime.UtcNow + LocalUtcOffset, DateTimeKind.Local)