ruby DateTime.strftime показывает неправильный час в дате - PullRequest
1 голос
/ 03 февраля 2011

У меня следующий код в моей модели

  def formatted_startdatetime
    unless startdatetime.nil?
      startdatetime.strftime('%d.%m.%Y %H:%M Uhr')
    end
  end

  def formatted_startdatetime=(date_str)
    self.startdatetime = DateTime.strptime(date_str,'%d.%m.%Y %H:%M') unless date_str.blank?
  end

formatted_startdatetime - это attr_accessor для исходного времени начала поля.

В представлении я использую плагин datetime Jquery, чтобы выбрать значение datetime.

В базе данных значения приведены ниже для примера записи. Это то же самое, что показано на виде.

| 5 | Летцтер Контакт | 2011-02-03 09:00:00 | 2011-02-04 17:00:00 |
| 19 | NULL |
NULL | NULL | 2011-02-03 15:14:52 | 2011-02-03 15:14:52 | ddkk | 1 |

Это таблица mysql, время начала которой 2011-02-03 09: 00: 00.

Но когда я отображаю его на виде с

  <b>Von:</b>
  <%= @activity.formatted_startdatetime unless @activity.startdatetime.blank? %><br/>

Я вижу это как:

Фон: 03.02.2011 10:00 Uhr

Почему 1 час добавляется к фактическому времени? Как я могу исправить это и получить то же самое время, что и в магазине?

Ответы [ 3 ]

1 голос
/ 04 февраля 2011

Я подозреваю, что ваша база данных хранит даты как UTC + 0, в то время как вы, вероятно, находитесь в стране UTC + 1, поэтому они конвертируются обратно во время чтения.

0 голосов
/ 28 декабря 2012

По какой-то причине у меня была эта проблема только в моем тесте.Я исправил это, явно указав смещение UTC в дату, которую я создал:

@date = Time.new(2012, 12, 27, 20, 15, 0, "+00:00")
visit '/mypage'
expect(page).to have_content @date.strftime '%F %R'
0 голосов
/ 04 февраля 2011

Похоже, время пересчитывается с помощью рельсов.

Это конфигурация часового пояса в config / environment.rb, которая имеет следующую строку

config.time_zone = 'Berlin'

Когда я следую в консоли, я получаю время, которое хранится в базе данных

@activity.startdatetime_before_type_cast

Теперь у меня есть два варианта

  1. Чтобы изменить часовой пояс на UTC, что будет неправильно, потому что я нахожусь в часовом поясе Европа / Берлин

  2. Напечатайте дату с помощью @ activity.startdatetime_before_type_cast

Какой вариант лучше?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...