Лучший способ хранить время недели

0

У меня есть ситуация, когда я хочу, чтобы пользователи могли указать временной диапазон, где время является относительным диапазоном, который существует на данной неделе. Таким образом, пользователь может выбрать понедельник 5 вечера - вторник 1 утра. Подумайте, что это похоже на "какое время - смена работы человека".

Моя первая реакция заключается в том, что я могу хранить "относительные" времена. Поэтому, предполагая, что неделя начнется в понедельник в 00:00:00, понедельник в полдень будет обозначаться как 86400/2 = 43200. Мне не очень нравится этот метод, потому что он затрудняет обработку часовых поясов.

Есть ли "лучший" способ сделать это (или просто хороший)? Есть ли у MySQL какой-то тип данных, который имеет дело с этим конкретно?

Я отметил эти "Perl" и "MySQL", так как я буду использовать их для этого приложения, но ответ не обязательно должен быть конкретным для любого из них технически.

  • 0
    Почему бы не преобразовать Monday 5PM - Tuesday 1AM в UTC datetime range при запросе?
  • 0
    Я мог бы неправильно понять, но не будет ли «конвертированный» диапазон времени и времени UTC абсолютной датой? Я ищу способ представления «Каждый вторник с 13:00 до 20:00», а не «Этот конкретный вторник с 13:00 до 20:00».
Показать ещё 1 комментарий
Теги:

2 ответа

0
Лучший ответ

Лучший ответ будет зависеть от того, что вы будете делать с данными вниз по течению.

Но я бы рекомендовал избегать любых хаков и делать простой подход (синтаксис таблицы Sybase, так как мой MySQL ржавый - извините)

CREATE TABLE weekday_ranges (
    start_dow    int,  -- 0-6 or 1-7 depending on what easier downstream 
    start_hour   int,  -- 0-23
    start_minute int,  -- 0-59
    -- Add seconds/micorseconds as needed
    end_dow      int,
    end_hour     int,
    end_minute   int
)

Альтернативный подход заключается в том, чтобы сохранить смещение (в секундах) с воскресенья 00:00, как начальное, так и конечное смещение. Это дает свои преимущества (например, сравнение диапазонов - это просто операторы < и > вместо сложных выражений).

  • 0
    Я думаю, что предпочел бы альтернативный подход, на который я намекал в своем вопросе. Я думаю, что ваше решение прекрасно работает на уровне приложений, но оно затруднено как запрос.
  • 0
    @GoldenNewby - он работает как запрос, но определенно более уродлив в плане запросов по сравнению с подходом со смещением секунд. Там, где он выигрывает, нет необходимости вычислять эпоху "воскресенье 00:00" для каждой недели как при сохранении, так и при извлечении
-2

Сохранение начального и конечного времени в одном поле (в отличие от разбитых на части) позволит проиндексировать поле. В противном случае нет большой разницы. (Это сводится к выбору того, собраны ли части в одно значение в Perl или SQL.)

Существует действительно неразрешимая проблема с часовым поясом: у вас нет возможности дифференцировать первые 2 часа со второго 2-х часов во время перехода из DST. Во входных данных просто недостаточно информации для обработки.

  • 0
    Что ж, я думаю о проблеме часовых поясов, что 2:00 всегда относится ко второму 2:00. Я могу определить, происходит ли часовой пояс в течение данной недели, видя продолжительность недели в секундах.
  • 0
    @ GoldenNewby, это ничего не решает. Вы все еще не имеете средства ссылки на первые 2 часа ночи. Так вот, может быть, вам никогда не придется, но вы еще не сказали так много.
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню