2012-02-22 5 views
1

У меня есть поле DateTime (только дата), которое использует значение «Сегодняшняя дата» в качестве значения по умолчанию. Однако, когда пользователь добавляет элемент в список, выбранная дата соответствует часовой пояс GMT.Значение даты по умолчанию DateTime SharePoint уважает часовой пояс

Если пользователь добавляет товар в 02/22/2012 в 19:00 (EST), значение по умолчанию будет считаться 2/23/2012.

Моя первая мысль состояла в том, чтобы проверить настройки веб-приложения, и они были установлены на -5 EST. Затем после некоторых поисков я обнаружил, что часовые пояса могут отличаться в зависимости от региональных настроек пользователей. Тестируя этот подход, я вручную установил для пользователя часовой пояс EST и выполнил тест, который дал тот же результат.

Наконец, после более поисков я нашел одну статью, в которой сказал, чтобы использовать вычисленное значение часть поля DateTime и указать «= NOW()»

Это, однако, вернулся «Формула содержит синтаксическую ошибку или не поддерживается «.

Кто-нибудь знает, как установить значение по умолчанию для поля DateTime в отношении часового пояса веб-приложения или пользователя?

спасибо.

+1

ли эта помощь http://blogs.msdn.com/b/saurabh1/archive/2012/02/22/регулировка-DateTime-по-профиль_пользователь время zone-and-server-region-settings-in-sharepoint.aspx – V4Vendetta

+0

Это может быть программный подход, но я ищу решение через собственные значения по умолчанию или вычисленные поля. Единственный способ, которым я могу придумать это исправление, - это использовать приемник событий событий и вручную установить столбец, что неприемлемо для моих обстоятельств. –

ответ

1

Sharepoint сохраняет все поле даты в UTC. То есть, если вы сохраняете поле datetime в списке, 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 Date». Затем добавьте элемент в этот список завтра 2/23/2012 в 00:05:00. Вы говорите, что бы ни было, указанная дата будет относиться к времени UTC? Итак, так показывают 2/22/2012? (Я ухожу из часового пояса Швеции в вашем профиле) –

+0

Хе-хе, вы, как швея, я знаю о конверсиях datetime :) Но ваше предположение верно, преимущество в том, что вы всегда знаете, что время возвращается в нейтральное режим, UTC.Я обновил пример с помощью решения теперь, когда все становится более ясным в том, что вы хотите! –

+0

Я нашел использование DateTimeOffset для решения большинства проблем. –

 Смежные вопросы

  • Нет связанных вопросов^_^