2012-02-22 175 views
1

我有一个DateTime字段(仅限日期),使用“今天的日期”作为默认值。 但是,当用户将项目添加到列表中时,所选日期与GMT时区相对应。SharePoint日期时间默认值尊重时区

因此,如果用户在2012年2月22日下午7点(东部标准时间)添加项目,默认值实际上将为2/23/2012。

我的第一个想法是检查Web应用程序设置,并将它们设置为-5 EST。然后,经过一些搜索后,我发现时区可能会因用户区域设置而有所不同。测试这种方法,我手动设置用户有一个EST时区,并执行测试,产生相同的结果。

最后,经过搜索我发现一个物品,所述使用日期时间字段的计算值部分和指定“= NOW()”

然而,这返回“的公式包含语法错误,或者不是支持的。”

有谁知道一种方法来让DateTime字段的默认值尊重Web应用程序或用户的时区吗?

谢谢。

+1

这是否帮助http://blogs.msdn.com/b/saurabh1/archive/2012/02/22 /调节-日期时间 - 根据-USERPROFILE时间zone-and-server-regional-settings-in-sharepoint.aspx – V4Vendetta 2012-02-22 05:36:19

+0

这可能是一种编程方法,但我正在通过本机默认值或计算字段查找解决方案。我能想到的实现这种修复的唯一方法是通过一个项目事件接收器并手动设置一个列 - 这在我的情况下是不可接受的。 – 2012-02-22 13:19:07

回答

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 
+0

我已验证网络应用程序和客户端位于同一时区。那么这仅仅是SharePoint的一个“功能”吗?为了进一步描述该示例,使用datetime字段创建一个列表,显示DateOnly和默认值“Today's Date”。然后在明天2/23/2012在00:05:00将项目添加到该列表。你是否在说什么,显示的日期将与UTC时间有关?所以因此显示2/22/2012? (我要在你的个人资料中关闭瑞典时区) – 2012-02-22 19:14:13

+0

嘿,你是我知道的日期时间转换的瑞典人。但是你的假设是正确的,好处是你总是知道时间回到中立模式,UTC。我已经用一个解决方案更新了这个例子,现在事情在你想要的内容中更加清晰! – 2012-02-22 20:30:40

+0

我发现使用DateTimeOffset来解决大多数问题。 – 2012-02-23 04:40:33