我有一个日期时间字段(仅限日期),它使用“今天的日期”作为默认值。
但是,当用户将项目添加到列表时,选择的日期对应于 GMT 时区。
因此,如果用户在 2012 年 2 月 22 日晚上 7 点(美国东部标准时间)添加项目,则默认值实际上将显示为 2012 年 2 月 23 日。
我的第一个想法是检查 Web 应用程序设置,它们被设置为 -5 EST。然后经过一些搜索,我发现时区可能会根据用户的区域设置而有所不同。测试此方法时,我手动将用户设置为具有 EST 时区,并执行产生相同结果的测试。
最后,经过更多搜索,我发现一篇文章说使用日期时间字段的计算值部分并指定“=NOW()”
然而,这返回“该公式包含语法错误或不受支持。”
有谁知道如何让 DateTime 字段的默认值尊重 Web 应用程序或用户的时区?
谢谢。
Sharepoint 以 UTC 格式存储所有日期字段。也就是说,如果您将日期时间字段保存在列表中,Sharepoint 实际上会将您选择的时间转换为 UTC,并将其转换回检索时该人员所在的时区。
首先检查您的服务器时区和客户端之间是否存在差异。使用任何 API 时,SharePoint 将始终返回 UTC 时间,并由您在界面或应用程序中进行转换。
如果您想以不同的方式解决此问题,则不能使用日期时间数据类型,而是将日期存储在文本字段中。
==更新==
如果您从 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)