2012-02-22 65 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