我有一个DateTime字段(仅限日期),它使用“今天的日期”作为默认值。 但是,当用户将项目添加到列表时,所选日期与GMT时区相对应。
因此,如果用户在2012年2月22日下午7点(美国东部时间)添加项目,则默认值实际上为2/23/2012。
我的第一个想法是检查Web应用程序设置,并将它们设置为-5 EST。然后经过一些搜索,我发现时区可能会因用户区域设置而有所不同。测试这种方法,我手动设置用户有一个EST时区,并执行产生相同结果的测试。
最后,经过更多搜索,我发现有一篇文章说要使用DateTime字段的Calculated Value部分并指定“= NOW()”
然而,这返回“公式包含语法错误或不受支持。”
是否有人知道将DateTime字段的默认值视为Web应用程序或用户的时区的方法?
谢谢。
答案 0 :(得分:1)
Sharepoint以UTC格式存储所有日期字段。也就是说,如果要在列表中保存日期时间字段,Sharepoint实际上会将您选择的时间转换为UTC,并将其转换回该人在检索时所处的任何时区。
首先检查服务器时区与客户端之间是否存在差异。使用任何API时,SharePoint始终会返回UTC时间,并将其留给您在您的界面或应用程序中进行转换。
如果您想以不同方式解决此问题,则无法使用datetime数据类型,而是将日期存储在文本字段中。
== UPDATE ==
如果您从SharePoint获得日期(始终以UTC格式)并且只想将其转换为当地时间,这是一个很好的做法
DateTime localDateTime = sharePointDate.ToLocalTime();
如果您将日期作为字符串,或者不确定格式,那么这可能是一个好方法
string dateStr = ("2/18/2012 9:49:51 PM").ToString(CultureInfo.InvariantCulture);
DateTime convertedDate = DateTime.SpecifyKind(DateTime.Parse(dateStr), DateTimeKind.Utc);
DateTime localDateTime = convertedDate.ToLocalTime();
// Outputs 2/18/2012 10:49:51 PM since I'm +1 in sweden