如何在Sitecore CMS中将时间调整为用户时区

时间:2014-12-18 13:51:47

标签: timezone sitecore

我正在使用自定义命令导入Sitecore中新创建的项目的数据。由于存在大量数据导入,因此该过程在后台进行。完成后,我会发送一封包含导入状态的电子邮件。我可以从UserProfile收到电子邮件:

User currentUser = Sitecore.Context.User;
UserProfile currentProfile = currentUser.Profile;

问题是我们在电子邮件中有导入开始时间。由于我没有找到存储用户时区的位置,因此我无法调整它以匹配用户时区。

您是否碰巧知道是否有任何设置可以从C#代码定义用户时区?

P.S。在右下角为当前用户调整了正确的时间,但我没有找到有关存储方式和位置的任何信息

2 个答案:

答案 0 :(得分:1)

我不确定它是否存储(实际上我相信Sitecore相对于CM服务器存储DateTime而不是客户端。)

为了让访问者/客户拥有准确的时区,您需要直接询问(注册提示或用户个人资料选项),或者使用来自原始IP的地理数据进行查找(尽管使用VPN和公共接入点这变得越来越不可靠了。)

我的建议是将开始时间存储在UTC中,并且(如果需要)让用户知道它当时已经启动。如果需要经过一段时间,请在发送电子邮件之前执行计算 - 因为开始时间和结束时间都是相对于服务器的,所以让他们知道完成了“5分30秒”。如果他们在下午5:08(电子邮件时间戳)收到电子邮件,他们可以做一些简单的匹配,并假设它是在5:03(或左右)开始的。

答案 1 :(得分:1)

我相信桌面右下方的时间是使用用户本地系统时间(最有可能使用JavaScript),因此它不依赖于他们的Sitecore用户配置文件。

似乎没有针对用户个人资料存储的任何时区信息,您可以获得的最好的是基于Regional ISO Code的CultureInfo,尽管对于多个国家/地区来说这仍然不是真正准确的时区(美国,加拿大,俄罗斯,澳大利亚等)。

您可以扩展User Profile to add custom properties并存储时区字段,但默认情况下不可用。

我的建议是以UTC时间列出开始时间,让用户在心理上调整自己的时区。这是我之前所做的,特别是因为服务器本身可以位于任何位置。