Как управлять часовыми поясами в Sitecore? - PullRequest
5 голосов
/ 25 августа 2011

Текущее средство выбора даты / времени в Sitecore предполагает локальное системное время сервера CM (в нашем случае восточное стандартное / летнее время), когда мы выбираем дату и время для наших событий.

Это быстро сталоОчевидно, что авторы контента нуждались в способе выбора часовых поясов для событий.Первоначально мы решили предоставить Droplist предопределенных сокращений часовых поясов, таких как '' PST ',' EST ',' EDT 'и т. Д. Хотя это решение работало нормально для целей отображения, мы сразу столкнулись с проблемами, когдапытаясь динамически генерировать встречи в календаре .ICS для событий.

Чтобы генерировать файлы .ICS, нам нужен способ объединить дату начала и окончания события (которая опять-таки указана в EST или EDT) и часовой пояссокращение (EST, PST и т. д.) в объект UTC DateTime.

Насколько я понимаю, ASP.NET не поддерживает сокращения часовых поясов , поэтому я считаю,мы застряли, поддерживая список сокращений вместе с их значениями смещения UTC.Недостаточно предоставить нашим авторам контента список часовых поясов, таких как GMT -08: 00, GMT -07: 00 и т. Д., Нам нужно включить какое-то сокращение или название, чтобы помочь им сделать выбор.

Есть ли в Sitecore какие-либо встроенные поля или утилиты для выбора часовых поясов?

Ответы [ 4 ]

6 голосов
/ 26 августа 2011

Sitecore не имеет встроенного шаблона для хранения часового пояса, но вы можете легко создать свой собственный шаблон для этого. Я рекомендую вам изменить Droplist на Droplink (выпадающий список ссылается на указанный элемент по имени, дроплинк ссылается на указанный элемент по GUID), а затем создать новый шаблон для источника. Ваш новый шаблон может называться Часовой пояс . Имя каждого элемента может быть дружественным именем (например, EDT, PDT и т. Д.), И на элементе может быть одно поле, Смещение . В вашем коде, когда вы определяете, какой элемент выбран из текущей Droplink , вы можете получить доступ к полю Offset для определения фактического смещения. Примерно так:

ReferenceField timezoneSelected = item.Fields["Timezone"];
string offsetVal = timezoneSelected.TargetItem.Fields["Offset"].Value;
// parse out the true value from offsetVal
3 голосов
/ 21 августа 2015

"В Sitecore версии 8.0 и новее в базу данных следует сохранять только значения даты и времени UTC." https://doc.sitecore.net/sitecore_experience_platform/setting_up_and_maintaining/utc/datetime/storing_datetime_values_in_databases

Подробнее по этому вопросу: https://doc.sitecore.net/sitecore_experience_platform/utc?sc_lang=en

1 голос
/ 21 августа 2015

Также стоит отметить, что если у вас мало географически распределенных серверов, вы должны иметь их не только в UTC, но и синхронизировать. Это относится ко всему, включая экземпляры DMS и xDB.

Если нет, то он будет прерываться Очередь событий и удаленные события (например, публикация), так как все это работает через базу данных core и (по умолчанию) проверяется на наличие новых событий (которые в фактом являются записи в базе данных с соответствующей отметкой времени).

1 голос
/ 23 июля 2014

Попробуйте сохранить все даты / время в UTC и конвертировать их в EST, PTS и т. Д. Во время рендеринга. Используя класс .Net TimeZoneInfo, вы можете просто преобразовать сохраненное значение UTC в подходящий часовой пояс во время рендеринга. Это также решит проблемы дневного света.

Sitecore не имеет большой поддержки для этого, но чтобы упростить задачу авторам контента, вы можете расширить поле Sitecore DateTime, включив в него часовой пояс , поскольку он вводится в CMS. Расширенный тип поля должен обрабатывать преобразование между UTC и предпочтительным часовым поясом авторов контента.

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

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