>我通过SuiteTalk进行搜索,并得到一条带有lastModifiedDate的记录:
<listRel:lastModifiedDate>2014-12-12T11:12:24.000-08:00</listRel:lastModifiedDate>
我在英国时间 19:12:24 更新了此记录,因此我知道最后修改日期是正确的。
在我的 C# 代码中,我读取了 lastModifiedDate 值,当我对 lastModifiedDate DateTime 值进行字符串串接时,该值会得到 12/12/2014 19:12:24。
然后我修改一条记录,使其 lastModifiedDate 更改为现在。
然后我执行另一个搜索,这次在搜索条件中指定上一个 lastModifiedDate 值。
生成的请求 XML 如下所示:
<q1:lastModifiedDate operator="notBefore">
<searchValue xmlns="urn:core_2014_2.platform.webservices.netsuite.com">2014-12-12T19:12:24</searchValue>
</q1:lastModifiedDate>
没有响应记录。
我认为这是因为 SuiteTalk 假设 2014-12-12T19:12:24与 2014-12-12T19:12:24-08:00 相同,这是在未来,当然是在我一分钟前更新记录的那一刻之后。
那么我怎样才能让SuiteTalk知道我的意思呢?
理想情况下,您将与DateTimeOffset
类型进行交互,因此不会混淆。
但是,由于您说您正在与从 WSDL 生成的代码进行交互,并且无法更改 WSDL 或其生成的代码,因此您必须与DateTime
类型进行交互。 执行此操作时,请确保.Kind
属性DateTimeKind.Utc
以便将时间转换为 UTC,并且在序列化为ISO8601格式时,xml 将在末尾包含Z
字符。
假设原始值是运行计算机的本地时间:
DateTime dt = new DateTime(2014,12,12,19,12,24);
foo.LastModifiedDate = dt.ToUniversalTime();
或者,如果您正在使用特定时区,则可以改为执行以下操作:
DateTime dt = new DateTime(2014,12,12,19,12,24);
TimeZoneInfo tzi = TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time");
foo.LastModifiedDate = TimeZoneInfo.ConvertTimeToUtc(dt, tzi);