我通过SuiteTalk进行搜索,并使用lastModifiedDate获取单个记录:
<listRel:lastModifiedDate>2014-12-12T11:12:24.000-08:00</listRel:lastModifiedDate>
我在英国时间19:12:24更新了这条记录,所以我知道lastModifiedDate是正确的。
在我的C#代码中,我读取了lastModifiedDate值,当我ToString 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知道我的意思是什么时候?
答案 0 :(得分:1)
理想情况下,您会与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);