【发布时间】:2011-11-21 20:46:39
【问题描述】:
在以 SQL Server 作为后端的应用程序(Silverlight 客户端 - 服务器 - SQL Server DB)中,我需要在不同时区进行各种计算和显示时间。我需要在客户端、服务器和数据库端进行计算。
这是我同时需要不同时区的应用程序,它不是典型的“本地 vs UTC” 所有数据都将以 UTC 格式存储,但我需要转换为: 1.定位时间 2.用户时间
因此,假设我们谈论航空旅行 - 我将以 UTC 存储时间,但用户会在出发/到达时区看到它们。
我正在寻找最佳做法,如果我在处理方法上有错误,也许可以纠正我:
- 数据库将包含“TimeZones”表,其中包含时区名称、ID、时间偏移等信息,并且该区域是否遵守 DST
- 数据库中的用户和位置将链接到时区
- 在客户端和服务器 (.NET) 上,我将加载 TimeZones 表并将其缓存在我的共享 DateTimeService 中。这样我就可以在需要时绑定 UI,并在一个中心位置完成我需要的所有转换
- UI/服务器上的计算将使用 .NET 的内置
DateTime和TimeZoneInfo功能完成
困扰我的是,我必须在 SQL Server 和 .NET 上执行 2 组不同的功能才能进行转换。我不想在 SQL Server 中使用 CLR 代码。我很可能会在 T-SQL 中手动编码时间转换函数,并且我会让 TimeZoneInfo 在 .NET 端为我工作。
此外,我将不得不在我引用 TImeZOne 表的数据库中的任何地方进行 FK。这将导致其他问题,例如不断加入等。
您如何管理数据库和应用程序中的此类信息?
【问题讨论】:
-
如果“所有数据都将存储在 UTC 中”,您肯定可以将所有转换推送到您的客户端/服务层,而不必编写 TSQL 或 CLR 时间转换函数吗?
-
正确。但我很确定我必须在服务器端进行这种转换。数据导出,可能是报表数据按摩等
标签: c# .net sql-server silverlight