SuiteTalk和时区不一致

时间:2014-12-12 20:41:00

标签: c# web-services timezone netsuite

我通过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知道我的意思是什么时候?

1 个答案:

答案 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);