我在网上搜索过但未找到TimeZone在SharePoint中保存数据库中DateTime对象的问题的答案。使用C#或PowerShell将日期返回给我时,他们总是休息一天。我的时区是W.Europe Standard Time
。 (瑞典斯德哥尔摩)如果我想与今天的日期进行比较,我应该如何转换返回日期?
更新
我设法从您的示例中构建了这段PowerShell代码。但它无法找到TimeZone。我做错了什么?
$strCurrentTimeZone = (Get-WmiObject win32_timezone).StandardName
$TZ = [System.TimeZoneInfo]::FindSystemTimeZoneById($strCurrentTimeZone)//<--False to find TimeZoneById
$LocalTime = [System.TimeZoneInfo]::ConvertTimeFromUtc($SharePointTime, $TZ)
答案 0 :(得分:0)
我有同样的问题。
我使用以下代码行在CSOM(C#)中解决了这个问题:
//Retrieve the date value from SP (1 day off in your case)
DateTime spDate = Convert.ToDateTime(spItem["DateField"]);
//Retrieve the timezone from the SharePoint web
var spTimeZone = context.Web.RegionalSettings.TimeZone;
context.Load(spTimeZone);
context.ExecuteQuery();
//Get the System.TimeZoneInfo from Microsoft.SharePoint.Client.TimeZone
var fixedTimeZoneName = spTimeZone.Description.Replace("and", "&");
var timeZoneInfo = TimeZoneInfo.GetSystemTimeZones().Where(tz => tz.DisplayName == fixedTimeZoneName).FirstOrDefault();
//Setting the DateTimeKind to Unspecified (otherwise the last function could return an error)
spDate = DateTime.SpecifyKind(spDate, DateTimeKind.Unspecified);
//Getting destination timezone for the new Date
var europeanTimeZone = TimeZoneInfo.GetSystemTimeZones().Where(t => t.Id == "W. Europe Standard Time").FirstOrDefault();
//Converting the DateTime to your 'W.Europe Standard Time' timezone
DateTime correctDateTime = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(spDate, timeZoneInfo.Id, europeanTimeZone.Id);
这可以解决您的问题。
答案 1 :(得分:0)
SharePoint以UTC格式存储日期时间字段值,并在用户检索时将其转换为适当的时区。但是,使用SharePoint API时,返回的日期是UTC格式,必须转换为本地时间。
在 C#/ PowerShell 日期时间可以通过TimeZone.ToLocalTime
Method转换为当地时间,例如:
var list = ctx.Web.Lists.GetByTitle(listTitle);
var item = list.GetItemById(itemId);
ctx.Load(item);
ctx.ExecuteQuery();
var created = (DateTime)item["Created"];
var createdLoc = System.TimeZone.CurrentTimeZone.ToLocalTime(created);