【问题标题】:How to manage TimeZones in Sitecore?如何在 Sitecore 中管理时区?
【发布时间】:2011-11-03 23:27:15
【问题描述】:

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

很快就发现,我们需要一种方法让内容作者为活动选择时区。最初,我们决定提供一个预定义时区缩写的Droplist,例如“PST”、“EST”、“EDT”等。虽然这个解决方案可以正常显示,但我们立即遇到了问题尝试为事件动态生成 .ICS 日历约会时。

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

我的理解是 ASP.NET does not support timezone abbreviations,所以我相信我们在维护缩写列表及其 UTC 偏移值时遇到了困难。仅向我们的内容作者提供时区列表(例如 GMT -08:00、GMT -07:00 等)是不够的,我们需要包含某种缩写或名称来帮助他们做出选择。

Sitecore 是否有任何用于选择时区的内置字段或实用程序?

【问题讨论】:

    标签: c# asp.net timezone sitecore sitecore6


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      “在 Sitecore 版本 8.0 及更高版本中,仅应将 UTC 日期/时间值保存到数据库中。” https://doc.sitecore.com/en/developers/102/sitecore-experience-manager/storing-date-time-values-in-databases.html

      关于此事的更多信息: https://doc.sitecore.com/en/developers/102/sitecore-experience-manager/utc.html

      【讨论】:

        【解决方案3】:

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

        Sitecore 对此没有太多支持,但为了让内容作者更轻松,您可以扩展 Sitecore DateTime 字段以在 CMS 中包含时区下拉列表输入。扩展字段类型应处理 UTC 和内容作者首选时区之间的转换。

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

        【讨论】:

          【解决方案4】:

          另外值得一提的是,如果您在地理上分布的服务器很少,那么您不仅应该让它们采用 UTC,而且应该是同步的。这也适用于所有内容,包括 DMS 和 xDB 实例。

          如果没有,它会破坏 Event Queue 和远程事件(如发布),因为这一切都通过 core 数据库进行,并且(默认情况下)会检查新事件(实际上是数据库中带有适当时间戳的记录)。

          【讨论】:

            猜你喜欢
            • 2020-01-06
            • 1970-01-01
            • 2023-02-20
            • 1970-01-01
            • 2011-07-25
            • 1970-01-01
            • 2014-07-13
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多