C# 从C搜索SQL Server时出现时区问题#
我有一个搜索模型,它向存储过程发送一个日期范围。存储过程返回结果。这在我在中央时间的地方很好用 然而,我们在印度有用户,他们可以输入有效日期,比如'08/15/2017 23:00',在表格中,他们的日期是'08/14/2017',因此他们不会返回任何数据 如果他们输入2017年8月14日,他们会得到错误的数据。2017年8月13日的数据 在将时区问题发送到存储过程之前,如何解决它 我试过了,但运气不好C# 从C搜索SQL Server时出现时区问题#,c#,sql-server,C#,Sql Server,我有一个搜索模型,它向存储过程发送一个日期范围。存储过程返回结果。这在我在中央时间的地方很好用 然而,我们在印度有用户,他们可以输入有效日期,比如'08/15/2017 23:00',在表格中,他们的日期是'08/14/2017',因此他们不会返回任何数据 如果他们输入2017年8月14日,他们会得到错误的数据。2017年8月13日的数据 在将时区问题发送到存储过程之前,如何解决它 我试过了,但运气不好 public DateTime AdjustForTimezone(DateTime dat
public DateTime AdjustForTimezone(DateTime date)
{
TimeZoneInfo timeInfo = TimeZoneInfo.FindSystemTimeZoneById(TimeZone.CurrentTimeZone.StandardName);
var newDate = TimeZoneInfo.ConvertTimeToUtc(date);
return newDate;
}
SqlCommand cmd = new SqlCommand("getTableData", connection);
cmd.CommandType = System.Data.CommandType.StoredProcedure;
SqlCommandBuilder.DeriveParameters(cmd);
cmd.Parameters[1].Value = AdjustForTimezone(dateModel.FromDate);
cmd.Parameters[2].Value = AdjustForTimezone(dateModel.toDate);
客户端到服务器
客户端应使用UTC
值或当前UTC偏移量向服务器发送日期时间实例
数据库应将(或)持久化为(或使用)
服务器到客户端
服务器应使用UTC值(或UTC偏移量)将日期时间信息发送给客户端。当显示日期时间时,客户有责任应用客户所需的偏移量(即,尽可能晚地在表示层中进行)
系列化
如果必须序列化日期时间,请使用符号
通过应用上述规则,您现在已经以可比较和明确的方式存储了日期时间值。现在可以对它们进行过滤、排序等 如果要筛选,请确保从客户端获取日期-时间筛选器参数并应用相同的规则。在美国东部时区搜索日期
2017-02-06
的记录应转换为日期范围在2017-02-06T05:00:00
和2017-02-07T05:00:00
之间的记录,因为该时区是UTC−05:00在那个时间点
旁注
- 这条规则也有例外,比如存储出生日期
- 就个人而言,我更喜欢以UTC的形式存储,而不是在代码和数据存储中
UTC
值或当前UTC偏移量向服务器发送日期时间实例
数据库应将(或)持久化为(或使用)
服务器到客户端
服务器应使用UTC值(或UTC偏移量)将日期时间信息发送给客户端。当显示日期时间时,客户有责任应用客户所需的偏移量(即,尽可能晚地在表示层中进行)
系列化
如果必须序列化日期时间,请使用符号
通过应用上述规则,您现在已经以可比较和明确的方式存储了日期时间值。现在可以对它们进行过滤、排序等 如果要筛选,请确保从客户端获取日期-时间筛选器参数并应用相同的规则。在美国东部时区搜索日期
2017-02-06
的记录应转换为日期范围在2017-02-06T05:00:00
和2017-02-07T05:00:00
之间的记录,因为该时区是UTC−05:00在那个时间点
旁注
- 这条规则也有例外,比如存储出生日期
- 就个人而言,我更喜欢以UTC的形式存储,而不是在代码和数据存储中