将文件添加到具有哈希表和日期时间字段的共享点库时,时区偏移量不正确

Timezone offset incorrect when add file to sharepoint library with hashtable and datetime field

不要问我为什么,但我需要通过一个操作上传文件和一组元数据(Files.Add() 和之后的 Update() 不合适)。

我使用此代码上传包含元数据的文件:

using System;
using System.Collections;
using Microsoft.SharePoint;

class Program
{
    static void Main(string[] args)
    {
       using (var site = new SPSite("http://shp2013:4000"))
       {
          using (var web = site.OpenWeb())
          {
             var list = web.Lists["TheLibrary"];

             var dt = new DateTime(2011,1,11, 18, 15, 00);
             var dtUtc = TimeZone.CurrentTimeZone.ToUniversalTime(dt);
             var ht = new Hashtable();
             ht.Add("TheDate", dtUtc);
             var file = list.RootFolder.Files.Add("filename.bin", new byte[]{ 1,5,12 }, ht, overwrite: true);
             var theDate = file.Item["TheDate"];

             Console.WriteLine("Original date: {0}", dt);
             Console.WriteLine("Original in UTC: {0}",dtUtc);
             Console.WriteLine("Value get: {0}", theDate);
          }       
       }
    }
}

输出为:

Original date: 1/11/2011 6:15:00 PM
Original in UTC: 1/11/2011 3:15:00 PM
Value get: 1/11/2011 7:15:00 PM

这就是问题所在:

变量theDate的值:

在w3wp.exe中:

2011-01-11 18:15:00.000(好)

在控制台应用程序中:

2011-01-11 19:15:00.000(不正确)

输入 dtUtc 包含相同的值。

为什么控制台应用程序的时区偏移与 w3wp 中的不同? 我需要检查什么:ThreadCulture、ThreadUICulture 或其他?

因为这是共享框架的一部分,代码必须 运行 在不同的环境中,具有任何 OS 设置。

背景:

Sharepoint 区域设置:

Windows 服务器设置:

请使用 SPUtility.CreateISO8601DateTimeFromSystemDateTime 设置日期。它解决了 SharePoint 中日期的许多问题。