将文件添加到具有哈希表和日期时间字段的共享点库时,时区偏移量不正确
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 区域设置:
- 语言环境:'russian'
- 时区:'(UTC+03:00) 莫斯科、圣彼得堡、伏尔加格勒 (RTZ 2)'
Windows 服务器设置:
- 显示语言:英语(美国)
- 区域格式:英语(美国)
- 家乡:俄罗斯
- 非 unicode 语言:英语(美国)
请使用 SPUtility.CreateISO8601DateTimeFromSystemDateTime 设置日期。它解决了 SharePoint 中日期的许多问题。
不要问我为什么,但我需要通过一个操作上传文件和一组元数据(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 区域设置:
- 语言环境:'russian'
- 时区:'(UTC+03:00) 莫斯科、圣彼得堡、伏尔加格勒 (RTZ 2)'
Windows 服务器设置:
- 显示语言:英语(美国)
- 区域格式:英语(美国)
- 家乡:俄罗斯
- 非 unicode 语言:英语(美国)
请使用 SPUtility.CreateISO8601DateTimeFromSystemDateTime 设置日期。它解决了 SharePoint 中日期的许多问题。