1

在将具有 00:00 时间的 javascript 中的日期传递给使用 linq to sql 访问数据库的 web 服务时,在某些客户端浏览器上,保存后,传递给数据库中 datetime 列的日期现在的时间不再是 00:00,在某些情况下是午夜前几个小时,因此日期会移到前几天的日期,其他时候是几个小时前。

我们如何始终保存日期而不是数据库的时间?

这是使用 asp.net webforms 和 c# 和 asmx webservices 并且大多数查询都已编译。

4

2 回答 2

0

这取决于日期如何编码的细节。但是,在高层次上,您必须:

  1. 确保时区在从客户端发送到服务器时不会被清除。这意味着,将其作为仅日期字符串或保留时区的日期发送;不是 UTC 日期。
  2. 在服务器上使用DateTimeKind(UTC 或本地)和/或DateTimeOffset以确保在您向客户端/数据库发送/接收时正确表示它。

另请参见此处: Linq to SQL DateTime values are local (Kind=Unspecified) - How do I make it UTC?

于 2012-05-05T21:49:51.697 回答
0

我猜客户端上的日期和时间很重要。在这种情况下,如何在将日期时间信息发送到服务器之前将其转换为 iso 格式,并同时发送客户端的时区偏移量。

var d = new Date
d.toISOString() // 2012-05-05T22:14:35.506Z
// or maybe jus
d.getTime() // milliseconds since jan 1st 1970 or thereabouts
d.getTimezoneOffset() // Timezone offset in minutes from UTC

通过这种方式,您可以获得 UTC 日期和时间以及时区偏移量,即 UCT 时间与本地时间相差多少分钟。例如,挪威将有一个负偏移(UTC-挪威时间 = 负)。

于 2012-05-05T22:16:59.727 回答