2011-08-25 21 views
5

El selector de fecha/hora actual en Sitecore asume la hora del sistema local del servidor CM (Eastern Standard/Daylight Time, en nuestro caso) cuando elegimos fechas y horas para nuestros eventos.¿Cómo administrar TimeZones en Sitecore?

Pronto se hizo evidente que necesitábamos una forma para que los autores de contenido elijan las zonas horarias para los eventos. Inicialmente, decidimos proporcionar lista desplegable de abreviaturas de zona horaria predefinidas como '' PST ',' EST ',' EDT ', etc. Si bien esta solución funcionaba bien para fines de visualización, inmediatamente nos encontramos con problemas al intentar generar dinámicamente .ICS citas del calendario para los eventos.

Para generar archivos .ICS, necesitamos una forma de combinar la fecha de inicio y finalización del evento (que nuevamente está en EST o EDT) y la abreviación de zona horaria (EST, PST, etc.) en un objeto UTC DateTime .

Entiendo que ASP.NET does not support timezone abbreviations, por lo que creo que estamos estancados manteniendo una lista de abreviaturas junto con sus valores de compensación UTC. No es suficiente dar a nuestros autores de contenido una lista de zonas horarias como GMT -08: 00, GMT -07: 00, etc., debemos incluir algún tipo de abreviatura o nombre para ayudarlos a realizar la selección.

¿Tiene Sitecore algún campo integrado o utilidades para seleccionar zonas horarias?

Respuesta

5

Sitecore no tiene una plantilla incorporada para almacenar la zona horaria, pero puede crear fácilmente su propia plantilla para hacerlo. Le recomiendo que cambie su Droplist a Droplink (una lista desplegable hace referencia al elemento al que se hace referencia por nombre, un enlace descendente hace referencia al elemento al que hace referencia GUID) y luego crea una nueva plantilla para el origen. Su nueva plantilla puede ser algo llamado Timezone. El nombre de cada elemento puede ser el nombre descriptivo (por ejemplo, EDT, PDT, etc.) y puede haber un campo en el elemento, un Compensación. En su código, cuando determina qué elemento se selecciona del Droplink, puede acceder al campo Desplazamiento para determinar el desplazamiento real. Algo como esto:

ReferenceField timezoneSelected = item.Fields["Timezone"]; 
string offsetVal = timezoneSelected.TargetItem.Fields["Offset"].Value; 
// parse out the true value from offsetVal 
1

trate de mantener todos los tiempos en fecha/hora UTC y convertirlos a EST, etc PTS en tiempo de render. Al utilizar la clase .Net TimeZoneInfo, puede simplemente convertir el valor UTC almacenado en una zona horaria adecuada en el momento del renderizado. Esto resolverá problemas de ahorro de luz diurna también.

Sitecore no tiene mucho apoyo para esto, pero para hacer las cosas más fáciles para los autores de contenido, se puede ampliar el campo de Sitecore DateTime para incluir la zona horaria desplegable como se incorpora en el CMS. El tipo de campo extendido debe manejar la conversión entre UTC y los autores de contenido de la zona horaria preferida.

También puede ampliar el perfil de usuario para que los autores de contenido puedan almacenar su zona horaria preferida. También debe ejecutar sus servidores a la hora UTC, pero como ya está en vivo con EST, puede que no sea una buena idea cambiarlo.

1

También digno de mencionar que en caso de que tenga pocos servidores distribuidos geográficamente, debe tenerlos no sólo en UTC, pero sincronizado. Esto se aplica a todo, incluidas las instancias DMS y xDB también.

Si no es así, se romperá Cola de eventos y eventos remotos (como la publicación) como que todas las obras a través núcleo base de datos y (por defecto) se comprueba para nuevos eventos (que en realidad son los registros en la base de datos con adecuada marca de tiempo).