2016-03-19 3 views
1

У меня есть время со значением Wed, 23 Mar 2016 00:07:00 ICT +07:00, и при звонке to_s он возвращает мне "03/23/2016 12:07 AM", но мне нужно "03/23/2016 07:07 AM".Преобразование времени в строку в пользовательском часовом поясе в Ruby

Цените ответ с объяснениями.

+0

Это переменная 'Object :: Time' или' Object :: Date :: DateTime'? – DoubleV

+0

@DoubleV - это объект ActiveSupport :: TimeWithZone', это атрибуты ActiveRecord. – Frozenna

+0

На самом деле, Rails делает все уже, но я разобрал плохой формат даты с клиентской стороны, мой плохой. – Frozenna

ответ

2

Если вам понадобится время в определенном формате, вы должны достигнуть значения strftime. Строка формата, которую вы хотите, это '%m/%d/%Y %H:%M %p', руководство, которое я связал выше, объясняет, что означают все спецификаторы формата. Все, что пора-иш в Ruby, Rails или будет иметь strftime метод, который соответствует Time#strftime поэтому не имеет значения, если у вас есть Time, DateTime, ActiveSupport::TimeWithZone ...

Вы также, кажется, хотят, чтобы преобразовать время для UTC, но есть и способ для этого: utc.

Собираем их вместе:

t.utc.strftime('%m/%d/%Y %H:%M %p') 

Вы действительно не должны использовать to_s или inspect на время для чего-нибудь, кроме отладки. Вам лучше пойти прямо на strftime, чтобы вы получили именно тот формат, который вам нужен.

2

Я думаю, это будет работать:

(t + (7*60*60)).to_st где является экземпляром Time.

+0

Я вижу трюк, но разве Rails не знает, как справиться с этим? – Frozenna

+1

@Frozenna думаю, что это [ссылка] (http://api.rubyonrails.org/classes/ActiveSupport/TimeWithZone.html) поможет вам. –

Смежные вопросы