【问题标题】:Basic analytics timezone solution基本分析时区解决方案
【发布时间】:2019-01-24 19:53:48
【问题描述】:

我为我的网站创建了一些基本分析。 注册用户有自己的页面。我为他们提供了一些关于页面浏览量的基本分析:查看次数、推荐人、浏览器、操作系统和国家/地区。用户可以按小时、天、周、月等进行过滤。 我汇总了当天和当月的所有视图。 我遇到的问题是数据是使用 UTC 时区存储的,这在我开始聚合数据之前很好。例如。 UTC 日与 EST 日不同,这意味着当按周、月和所有时间过滤时,对于 UTC 时区以外的用户,分析是不正确的。

我聚合视图的原因是视图表不会变得太大。当天的所有视图都被压缩为特定页面的一行,然后再次压缩为该月的一行。

我该如何解决这个问题?

【问题讨论】:

  • 如果您的用户位于多个时区,我认为您无法预先聚合数据。您需要根据用户对班次、一天、一个月等的定义,按需聚合数据。
  • @Flydog57 不知道如何解决这个问题,也许是 MapReduce?以前从来没有做过这样的事情。记录视图和按需聚合可能是大量数据并且速度很慢。有什么想法或者你能指出我正确的方向吗?谢谢
  • 选择一个标准的“日期”——无论是基于 UTC,还是您的大多数用户所在的地方,或者地理中心(例如,如果他们主要是美国用户,聚集在海岸,选择,说“中部时间”。例如,请注意,Stack Overflow 网站上的所有内容都以 UTC 天数衡量。另一种选择是多个预聚合(美洲日、欧洲日、中亚日)。

标签: c# database asp.net-core globalization


【解决方案1】:

为什么不使用 DateTimeOffset?

DateTimeOffset 考虑瞬时时间。

https://docs.microsoft.com/en-us/dotnet/standard/datetime/choosing-between-datetime

DateTime vs DateTimeOffset

DateTimeOffset 结构表示一个日期和时间值, 连同一个偏移量,该偏移量指示该值的差异程度 来自 UTC。因此,该值始终明确地标识单个 时间点。

DateTimeOffset 类型包括 DateTime 类型以及时区感知。这使它适合 对于执行以下操作的应用程序:

唯一且明确地识别单个时间点。这 DateTimeOffset 类型可用于明确定义 “现在”,记录交易时间,记录系统时间或 应用程序事件,并记录文件的创建和修改 次。

执行一般的日期和时间运算。

保留多个相关时间,只要这些时间存储为 两个单独的值或作为结构的两个成员。

【讨论】:

    猜你喜欢
    • 2016-03-18
    • 1970-01-01
    • 1970-01-01
    • 2014-03-10
    • 1970-01-01
    • 1970-01-01
    • 2018-06-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多