Значение по умолчанию для SharePoint DateTime относится к часовому поясу - PullRequest
1 голос
/ 22 февраля 2012

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

Поэтому, если пользователь добавляет элемент 22.02.2012 в 19:00 (EST), значение по умолчанию будет действительно 23.02.2012.

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

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

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

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

Спасибо.

1 Ответ

1 голос
/ 22 февраля 2012

Sharepoint сохраняет все поля даты в UTC. То есть, если вы сохраняете поле даты и времени в списке, Sharepoint фактически преобразует выбранное вами время в UTC и преобразовывает его обратно в любой часовой пояс, в котором находится человек при получении.

Начните с проверки, есть ли разница между часовым поясом вашего сервера и вашим клиентом. При использовании любого API SharePoint всегда будет возвращать время UTC и предоставит вам возможность выполнить преобразование в вашем интерфейсе или приложении.

Если вы хотите решить эту проблему по-другому, вы не можете использовать тип данных datetime, вместо этого хранить даты в текстовых полях.

== ОБНОВЛЕНИЕ ==

Если вы получили дату от 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
...