处理UTC,TimeZone并使用LocalTime对其进行GROUP BY

dar*_*iol 6 architecture sql-server nhibernate timezone group-by

我被卡住了.需要帮忙.

我将UTC日期存储在数据库中.

示例行:

GeneratedAt:

  • 2011-06-08 23:30
  • 2011-06-09 03:30
  • 2011-06-09 15:30

我的用户当地时间是-2小时(中欧).当我想要从09开始的行时,我有3行.

问题在于GROUP BY日用于报告目的.我有08的1和09的2,但我当地时间不是这样.

我看到的任何地方:"以UTC格式存储数据".怎么做得好?

更新1:
对于数据访问我正在使用NHibernate,我更喜欢独立于数据库引擎的解决方案.所以,我正在寻找类似日期/时间维度表(或类似的东西)的解决方案.

我的数据表包含如下列:

  • GeneratedAt(日期时间)
  • GeneratedAt_Year(int)
  • GeneratedAt_Month(int)
  • GeneratedAt_Day(int)
  • GeneratedAt_Hour(int)

多亏了我可以轻松分组:年,年+月,年+月+日,年+月+日+小时.不幸的是这是UTC.:(

如何重构此解决方案以处理用户时区?

noc*_*che 3

您可以创建该表的视图,通过应用 DATEADD 函数提供所需中欧时区的日期时间值。

因此,如果您的表列是:id, other_id, evt_time

那么 select 语句(用于视图定义)将是:

SELECT id, other_id, evt_time, DATEADD( hh, -2, evt_time ) AS evt_time_ce
  FROM MyTable
Run Code Online (Sandbox Code Playgroud)

然后您可以使用该视图并将其应用于GROUP_BYevt_time_ce