Если да d = DateTime.now
, как мне преобразовать d в UTC (с соответствующей датой)?
98
d = DateTime.now.utc
Ой!
Кажется, это работает в Rails, но не в ванильном Ruby (и, конечно, это то, что задает вопрос)
d = Time.now.utc
Однако работает.
Есть ли причина, по которой вам нужно использовать, DateTime
а не Time
? Time
должно включать все необходимое:
irb(main):016:0> Time.now
=> Thu Apr 16 12:40:44 +0100 2009
будет работать в стандартном Ruby (т.е. без ActiveSupport).
источник
new_offset
аргумент метода по умолчанию0
уже. ТакDateTime.now.new_offset
тоже можно использовать.К сожалению, класс DateTime не имеет для этого удобных методов, доступных в классе Time. Вы можете преобразовать любой объект DateTime в UTC следующим образом:
Вы можете вернуться с UTC на местное время, используя:
где
d
- объект DateTime по времени UTC. Если вы хотите использовать их в качестве удобных методов, вы можете создать их следующим образом:Вы можете увидеть это в действии в следующем сеансе irb:
Как вы можете видеть выше, исходный объект DateTime имеет смещение -04: 00 (восточное время). Я нахожусь в тихоокеанском времени со смещением -07: 00. Вызов,
localtime
как описано ранее, правильно преобразует объект DateTime в местное время. Вызовutc
объекта правильно преобразует его в смещение UTC.источник
Попробуйте это, работает на Ruby :
источник
Вы можете установить ENV, если хотите, чтобы ваш
Time.now
иDateTime.now
отвечал в UTC.источник
В irb:
преобразует время в utc. Но, как написано, если это просто время, вы можете использовать:
и получите его прямо сейчас.
источник
Строковое представление DateTime может быть проанализировано классом Time.
источник