Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.NETWeb服务中的日期时区转换_.net_Web Services_Datetime_Timezone - Fatal编程技术网

.NETWeb服务中的日期时区转换

.NETWeb服务中的日期时区转换,.net,web-services,datetime,timezone,.net,Web Services,Datetime,Timezone,我有一个web服务(实际上是一个支持silverlight的wcf服务,但出于所有目的,它是一个web服务),其方法带有一个datetime参数。该方法从客户端调用,该客户端可能位于不同的时区。承载web服务的服务处于太平洋标准时间,web服务似乎正在将日期时间值转换为服务器时区。web服务的目的是将datetime值与数据库中的值进行比较,但数据库中的值是基于客户端时区的,因此由于转换,比较不起作用 有没有办法关闭转换功能?看看这个问题,它讨论了你想要什么 看起来最简单的方法是在webm

我有一个web服务(实际上是一个支持silverlight的wcf服务,但出于所有目的,它是一个web服务),其方法带有一个datetime参数。该方法从客户端调用,该客户端可能位于不同的时区。承载web服务的服务处于太平洋标准时间,web服务似乎正在将日期时间值转换为服务器时区。web服务的目的是将datetime值与数据库中的值进行比较,但数据库中的值是基于客户端时区的,因此由于转换,比较不起作用


有没有办法关闭转换功能?

看看这个问题,它讨论了你想要什么

看起来最简单的方法是在webmethod中传递客户端时区,或者只是将整个时间作为字符串而不是日期时间传递

web服务似乎正在将日期时间值转换为服务器时区

我试图确保我的回答是正确的:您的web服务方法接受DateTime类型的参数(如中的System.DateTime),并且正在转换传递的参数

DateTime对象没有隐式时区,因此web服务推断本地时间的任何决定都是一个逻辑缺陷(至少在不支持时区标准的情况下)

如果您可以提供服务器和客户机代码片段,那么将使场景更容易诊断

更新:不确定此场景是否准确,请澄清:

  • 客户端提交日期时间值为'12:00:00:00 PM CST'的请求
  • PST中的服务器在“10:00:00:00 PM PST”接收/解释请求

如果是这种情况,能否将所有数据转换为UTC时间?如果执行查询查找,这意味着将存储的数据也转换为UTC。

不太正确,因为DateTime实例(结构)不包含时区信息。从.NET开始,每个DateTime结构上都有一个属性。。。3.0? 我不知道版本。“种类”是UTC、本地或未指定。因此,虽然它本身不是一个时区,但它表明时间不是以本地时区表示,就是以世界时区表示。查看文档以了解更多信息

要回答原始问题,请将每个人转换为单个标准时区。UTC工作得很好,也很容易,因为BCL中内置了一些方法,但选择哪个时区并不重要。让每个人都同意一个标准


您可以做的另一件事是将时间值作为“TotalSeconds”值传输,因为。。。过去的某个特定时间。比如1970年1月1日(unix时间),或者1601年1月1日(windows文件时间)。但该方法隐含的含义是,所有合作方都同意该时间起点为UTC。因此,从开始到现在的一百万秒(“纪元”)指的是同一时刻,无论我在埃尔帕索、纳舒亚、东京还是伦敦

当一个日期时间被序列化时,它的格式包括时区信息。抱歉,误解了这个问题——听起来好像是服务在转换值,而不是WCF内部。我必须这样做。在数据库中将日期时间存储为utc,并在调用web服务之前将客户端值转换为utc。由于我们专门使用utc,因此我从未在我们服务的任何方法参数中看到日期时间转换。乐意帮忙;我这边也学到了一些东西。:-)