2011-08-25 33 views
5

当我们为事件选择日期和时间时,Sitecore中的当前日期/时间选择器假定CM服务器的本地系统时间(在我们的例子中为东部标准/日光时间)。如何管理Sitecore中的时区?

很明显,我们需要一种内容作者为事件选择时区的方法。最初,我们决定提供预定义的时区缩写(如'PST','EST','EDT'等)的下拉列表。虽然此解决方案可用于显示目的,但我们在尝试动态生成时立即遇到问题.ICS日历约会的事件。

为了生成.ICS文件,我们需要一种将事件的开始日期和结束日期(又是EST或EDT)和时区缩写(EST,PST等)组合成一个UTC日期时间对象。

这是我的理解,ASP.NET does not support timezone abbreviations,所以我相信我们坚持保持一个缩写列表以及他们的UTC偏移值。仅向我们的内容作者提供GMT -08:00,GMT -07:00等时区列表是不够的,我们需要包含某种缩写或名称来帮助他们进行选择。

Sitecore是否有任何内置的字段或工具来选择时区?

回答

5

Sitecore没有用于存储时区的内置模板,但您可以轻松创建自己的模板。我建议您将Droplist更改为Droplink(下拉列表通过名称引用引用的项目,下拉链接通过GUID引用引用的项目),然后为源创建新模板。你的新模板可以被称为时区。每个项目的名称可以是友好名称(例如EDT,PDT等),并且项目上可以有一个字段,Offset。在您的代码中,当您确定从当前下拉链路中选取哪个项目时,可以访问其上的偏移字段以确定实际偏移量。类似这样的:

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

尝试保持UTC的所有日期/时间并将它们转换为EST,PTS等渲染时间。通过使用.Net TimeZoneInfo类,您可以简单地将存储的UTC值在渲染时转换为合适的时区。这也将解决日光节约问题。

Sitecore的不具有这么多的支持,反而使事情内容创作者更容易,可以延长Sitecore的日期时间字段,包括因为它是进入到CMS时区下拉。扩展字段类型应处理UTC和内容作者首选时区之间的转换。

您还可以扩展用户配置文件,以便内容作者可以存储他们的首选时区。您还应该在UTC时间运行您的服务器,但由于您已经使用EST,因此改变它可能不是一个好主意。

1

另外值得一提的是,如果你有几个地理上分散的服务器,你应该让他们不仅在UTC,但同步。这适用于包括DMS和xDB实例的所有内容。

如果不是,它会打破事件队列和远程事件(如发行)的所有作品通过核心数据库(默认)检查新的事件(这实际上是在数据库的适当记录时间戳)。