【问题标题】:How to group by date while taking into account the timezone in linq2db (CONVERT_TZ)?如何在考虑 linq2db (CONVERT_TZ) 中的时区的同时按日期分组?
【发布时间】:2020-01-27 14:25:45
【问题描述】:

假设我们有一个针对不同客户的活动列表,按日期保存。 日期以 UTC 格式保存,我们知道客户的时区。 我们想知道客户所在时区每天的活动量,同时考虑夏令时。

在 mysql 中,我们可以使用 CONVERT_TZ(A.activity_date, 'UTC', S.timezone) As LocalDate 并按 LocalDate 分组。

在 linq2db 中,我们可以获取时区的偏移量并将其添加到 utc 日期,但是,这不会考虑 DST。

在 linq2db 中是否有一种我尚未发现的方法可以做到这一点?如果没有,有没有办法在 linq2db 中创建一个映射到CONVERT_TZ 的方法?

【问题讨论】:

    标签: mysql linq linq2db


    【解决方案1】:

    一种可能的方法是将方法 CONVERT_TZ 映射到 C# 方法,如下所示:

    [Sql.Function("CONVERT_TZ", ServerSideOnly = true)]
    public static DateTime? ConvertToTz(DateTime? i_Date, string i_TzFrom, string i_TzTo)
    {
       throw new InvalidOperationException();
    }
    

    然后可以像任何 linq2db 方法一样调用ConvertToTz,例如

    ...GroupBy(a => ConvertToTz(a.ActivityDate, "UTC", "America/Montreal"))
    .Select(g => new {
     Date = g.Key,
     Count = g.Count()
    })
    

    【讨论】:

      猜你喜欢
      • 2015-03-16
      • 1970-01-01
      • 2011-08-28
      • 1970-01-01
      • 2016-05-06
      • 1970-01-01
      • 2017-08-05
      • 1970-01-01
      相关资源
      最近更新 更多