计算日期时间轴最小,最大和主要次要刻度间隔

Dr.*_*ABT 5 algorithm charts datetime

我正在寻找一个好的算法来为自定义图表组件上的DateTime轴生成漂亮的主要/次要刻度间隔.我在这里已经阅读了上一个问题,它讨论了计算数字轴的主要/次要刻度和最小/最大值的好方法.但是,很难将其转换为日期轴计算.

原因是某些日期范围与其他日期范围不同,有些甚至不是一致的时间范围.考虑几分钟内的轴范围.这种计算相当简单,因为您可以使用与上述类似的算法将分钟数除以.但是,如果要求同一轴在年/月或月/周范围内显示数据,您会怎么做?

对此轴的要求是它可以计算主要/次要刻度标记,以便图表永远不会太混乱,输入数据范围以毫秒为单位,直到数月和数年.它旨在用于实时图表,因此静态表示不如快速更新的能力那么重要.我的简单算法做到了这一点:

  • 如果范围> 3年,则选择major = 1年,minor = 3个月
  • 如果范围> 1年,则选择major = 3个月,minor = 1个月
  • 如果范围> 3个月,选择major = month,minor = nothing(我考虑周,但是因为月份不能被一周整除所以看起来很奇怪)
  • 如果范围> 1周,则选择major = 1天,minor = nothing
  • 如果范围<1天,请根据好数字算法选择小时
  • 如果范围<1小时,请选择分钟
  • 如果范围<1分钟,请选择秒

等等...

正如你可以看到它的很多if语句,可能会遗漏一些东西.在这种方法中,我经常在某些日期出现故障,我想知道是否有一种简单或常见的方法来解决这个问题.

最好的问候,安德鲁

Dia*_*cus 2

  1. 有一个所有可能的刻度的排序数组:1 秒、1 分钟、1 小时、1 天、1 个月、1 年。
  2. min_dist_major确定主要 ( ) 和次要 ( )的最小距离是多少min_dist_minor。这些是常量并且具有以像素为单位的值。
  3. 找到大于的最小主刻度min_dist_major找到比显示器上显示的
  4. 然后找到小于主刻度但大于min_dist_minor监视器上显示的最小次刻度。如果找不到小勾号,则它不存在。

您可以使用其他刻度来扩展数组,例如每种类型 2 和 5。