【发布时间】:2015-12-27 11:48:34
【问题描述】:
问题
我有一个 Windows 应用程序使用 SharePoint 托管的 Web 服务与服务器同步。
当应用程序使用 LAN(通过内部代理服务器)同步到服务器时,所有 DateTime 格式都是 dd/MM/yyyy 格式(这就是它的意图)
但是,当应用通过 4G 同步时,所有 DateTime 格式都是 MM/dd/yyyy 格式。
所有入站和出站数据都会发生这种情况。
服务器
带有托管 SOAP 服务的 SharePoint 2013 的 Windows Server 2012
地区:新加坡
格式:英文(新加坡)
客户
Windows 10 平板电脑应用
地区:新加坡
格式:英文(新加坡)
其他信息:
1. WiFi 和 4G 使用的是同一台平板电脑,所以我们可以统治
出 2 个具有不同区域设置的平板电脑。
2. 我已验证 Windows 10 应用程序正确传递了格式,并且它是在 WiFi 和 4G 上表现不同的服务器。
3. 我相信这个问题是由 .NET 本身引起的,而不是因为 SharePoint。但是,我不想排除它,因为我不确定实际原因。如果您认为这是由 SharePoint 引起的,请在需要任何进一步信息时发表评论
片段:
为了简单起见,我跳过了 sn-p 中的 using 语句和 SPWeb 语句。以及日期时间类型的 SPList 中的 LastModifiedTime 字段,而不是单行文本。
型号
public class Record
{
public string ID {get; set}
public string ModifiedDateTime {get; set;} //Don't ask why it is not a DateTime object. It was too late by the time I took over
}
网络服务
public class WebService : IWebService
{
public List<Record> GetUpdates(string lastModifiedTime)
{
SPQuery query= QueryBuilder.GetUpdateQuery(lastModifiedDateTime);
SPList spRecordList = spWeb.Lists["Record"];
SPListItemCollection results = spRecordList.GetItems(query);
List<Record> records = new List<Record>();
foreach(SPListItem spRecord in results)
{
Record record = new Record();
record.ID = spRecord.ID.ToString();
record.ModifiedDateTime = Convert.ToString(spRecord["LastModifiedTime"]);
//1 June 2015 would return as 01/06/2015 in WiFi but 06/01/2015 on 4G
records.Add(record);
}
return records;
}
public Record CreateOrUpdateRecord(Record record)
{
SPListItem spRecord = null;
SPList spRecordList = spWeb.Lists["Record"];
if(string.IsNullOrEmpty(record.ID))
{
spRecord = spRecordList.AddItem();
record.ID = spRecord.ID.ToString();
}
else
{
spRecord = spRecordList.GetItemByID(record.ID);
}
DateTime modified = Convert.ToDateTime(record.Modified);
spRecord["LastModifiedTime"] = modified;
/*
Say ModifiedDateTime is 1 June 2015.
Then on WiFi, modified = 01/06/2015
On 4G, modified = 06/01/2015
*/
return record;
}
}
现在,我通过在字符串和 DateTime 之间转换时使用格式字符串解决了这个问题,反之亦然。所以或多或少,我现在已经让它工作了。
所以我的问题是,这种行为背后的原因是什么?如果可能,请引用文档链接或对任何其他解释此行为的来源的引用
服务器是否有可能从请求标头中推断出文化信息?我一直认为 DateTime.Parse()/Convert.ToDateTime() 总是从它运行的机器的区域设置中获得默认值。
【问题讨论】:
标签: c# asp.net .net datetime sharepoint