В настоящее время я пишу довольно простое приложение, которое открывает время открытия/закрытия бизнеса и сталкивается с серьезными трудностями, пытаясь понять, как правильно хранить информацию.
Большая часть нашей критической функциональности в значительной степени зависит от времени получения абсолютно совершенной, поэтому, очевидно, я хочу, чтобы все было сделано наилучшим образом, чтобы начать с!
Кроме того, данные будут вводиться пользователями, поэтому, если базовое представление немного сложнее (например, используя TimeSpans для учета открытия за полночь), это должно быть невидимым для пользователя.
Мне нужно сначала сохранить часы работы, по дням недели, связанный с ними часовой пояс, например:
- M: 1000 - 2330
- T: 1000 - 0030
- W: 1900 - 0300
- Th: 2000 - 0300
- F: 2000 - 0800
- Sa: 1000 - 0500
- Su: 1000 - 2300
В настоящее время я думаю, что лучший способ сохранить это - использовать такой класс:
public class OpeningHours
{
ZonedDateTime OpeningTime { get; set; }
Period durationOpen { get; set; }
// TODO: add a method to calculate ClosingTime as a ZonedDateTime
}
Однако здесь есть два основных осложнения:
-
Я не хочу хранить год, месяц или дату в ZonedDateTime - мне просто интересно, как DayOfWeek.
Конечно, я мог бы просто сохранить каждое значение в качестве первого понедельника/вторника и т.д. после 1 января 1970 года, но это кажется взломанным и в значительной степени неправильным - как автор NodaTime, очень правильно, объясняет здесь, когда речь идет об ограничениях реализации BCL DateTime. У меня также есть чувство, что это, вероятно, закончится странными причудливыми ошибками, если позже мы попытаемся выполнить любую арифметику с датами.
- Пользователь все равно должен будет ввести ClosingTime. На стороне клиента, я полагаю, я мог бы сделать что-то простое, как всегда предполагать, что ClosingTime на следующий день, если он до открытия, но еще раз, он не идеален, а также не учитывает места, которые могут быть открыты более 24 часов (например, супермаркеты)
Еще одна вещь, которую я рассмотрел, - это использовать таблицу с часами/днями и позволять людям выделять часы недели, чтобы выбрать время открытия, но вы все равно сталкиваетесь с той же проблемой, только имея желание сохранить часть DayOfWeek в приложении "Время в пути".
Любые предложения будут оценены, потратив последние 6 часов на чтение о смехотворно глупых способах, которые мы, люди, представляем, время сожгли меня немного!