Вы должны использовать DateTime.ToLocalTime()
и TimeZoneInfo.ConvertTimeToUtc()
в C # - см. https://msdn.microsoft.com/en-us/library/system.datetime.tolocaltime(v=vs.110).aspx.
Если вы хотите хранить только те часы, когда вы открыты с понедельника по воскресенье, хорошо. Имейте простую таблицу данных, чтобы описать только время для каждого дня (от 0 = воскресенье до 7 = суббота - это перечисление .Net DayOfWeek
). Ваша таблица поиска может выглядеть следующим образом:
0 null
1 08:00:00
2 08:00:00
3 08:00:00
4 08:30:00
5 08:30:00
6 10:30:00
(Используйте любой тип данных, который вам подходит - например, SQL Server 2008+ имеет тип данных TIME. Нулевой можно использовать для Закрытого в этот день, т.е. без открытого времени.)
Когда приходит время показывать ВАШЕ время любому другому пользователю, пользователь должен создать ваше время UTC на лету в тот момент, когда вы отображаете информацию для локального пользователя.
Коник предоставил один подход. Мой подход использует простые строки даты / времени. Чтобы использовать мой подход, просто храните значения времени в день в вашей базе данных. Затем вы можете посмотреть на открытое время для любого дня. Чтобы выразить это время для другого пользователя в любой локали, используйте этот код для преобразования вашего времени в UTC (вы можете заменить строковое значение «08:00:00 AM» строковой переменной, которую вы заполнили после просмотра времени открытия в вашем базы данных):
var StoreOpenTimeInUtc = TimeZoneInfo.ConvertTimeToUtc(Convert.ToDateTime("08:00:00 AM"));
Чтобы посмотреть время открытия в вашей базе данных для определенного дня в будущем , вам нужно объединить дату с вашим значением времени, например:
var StoreOpenTimeInUtc = TimeZoneInfo.ConvertTimeToUtc(Convert.ToDateTime("04/28/2018 08:00:00 AM"));
Если у вас есть точная переменная StoreOpenTimeInUtc
, вы можете использовать ее в качестве значения UTC на чужой машине, которая находится где-нибудь еще на планете Земля. Чтобы преобразовать это значение UTC в местное время, используйте метод .NET ToLocalTime ():
var OpenTimeForLocalUser = StoreOpenTimeInUtc.ToLocalTime();
Обратите внимание, что при таком подходе вы должны хранить только время открытия, как показано выше. Вам не нужно беспокоиться о датах, локальных смещениях от UTC или о чем-либо еще. Просто используйте плечо ConvertTimeToUtc()
и ToLocalTime()
, как показано.