Datetime 使用哈希表和日期时间字段将文件添加到sharepoint库时,时区偏移不正确

Datetime 使用哈希表和日期时间字段将文件添加到sharepoint库时,时区偏移不正确,datetime,sharepoint,timezone,Datetime,Sharepoint,Timezone,不要问我为什么,但我需要用一个操作上传文件和元数据集(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:

不要问我为什么,但我需要用一个操作上传文件和元数据集(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
这就是问题所在:

变量的值日期

在w3wp.exe中:

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

在控制台应用程序中:

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

在输入时,dtUtc包含相同的值

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

因为这是共享框架的一部分,所以代码必须在具有任何操作系统设置的不同环境中运行

背景

Sharepoint区域设置:

  • 地点:“俄语”
  • 时区:“(UTC+03:00)莫斯科,圣彼得堡,伏尔加格勒(RTZ 2)”
Windows服务器设置:

  • 显示语言:英语(美国)
  • 地区格式:英文(美国)
  • 家乡:俄罗斯
  • 非unicode语言:英语(美国)

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

如果时区是UTC+3,为什么18:15是正确的?如果你能制作一个简短但完整的控制台应用程序来演示这个问题,你能做到吗?把与Sharepoint相关的一切都排除在外会很好。(老实说,哈希表的相关性也不清楚…@JonSkeet,请参见屏幕截图,前提是代码完整。在Add()方法中传递了哈希表。我认为18:15是正确的,因为我设置了它,但我会在+1小时后返回请不要发布代码的截图(无论如何,这并不完整-它不包括类声明)-截图让其他人很难复制您的结果。让您的控制台应用程序写出相关值,并单独显示输出。我现在明白为什么这是特定于Sharepoint的了……这段代码中的
list
是什么?(请记住,我没有sharepoint经验,但您似乎没有在
使用
语句中的任何位置使用
web