Я ищу хороший алгоритм для генерации хороших основных / второстепенных тиковых интервалов для оси DateTime в пользовательском компоненте построения графиков.Я прочитал этот предыдущий вопрос здесь, где обсуждается хороший способ вычисления основных / второстепенных тиков и минимальных / максимальных значений для числовой оси.Однако это трудно перевести на расчеты по оси дат.
Причина в том, что некоторые диапазоны дат находятся в разных основаниях, а другие - даже не в согласованных временных рамках.Рассмотрим диапазон оси через несколько минут.Этот расчет довольно прост, поскольку вы можете разделить минуты, используя алгоритм, аналогичный представленному выше.Однако, что вы делаете, когда одна и та же ось запрашивается для представления данных в диапазоне лет / месяцев или месяцев / недель?
Требование для этой оси состоит в том, что она может рассчитывать основные / второстепенные отметки, чтобы диаграмма никогда не была слишком загромождена, с диапазонами входных данных в миллисекундах вплоть до месяцев и лет.Он предназначен для использования на графике в реальном времени, поэтому статическое представление не так важно, как возможность быстрого обновления.Мой упрощенный алгоритм делает это:
- Если диапазон> 3 года, выберите основной = 1 год, младший = 3 месяца
- Если диапазон> 1 год, выберите основной = 3 месяца, младший =1 месяц
- Если диапазон> 3 месяца, выберите основной = месяц, второстепенный = ничего (я рассматривал неделю, однако, поскольку месяц не делится на неделю, он выглядит странно)
- Если диапазон> 1 неделявыберите основной = 1 день, младший = ничего
- Если диапазон <1 день, выберите часы в соответствии с алгоритмом красивых чисел </li>
- Если диапазон <1 час, выберите минуты </li>
- Если диапазон <1 минута, выберите секунды </li>
и т. Д.
Поскольку вы можете видеть множество операторов if и возможно что-то пропустить.При таком подходе я часто сталкиваюсь с глюками в определенные даты, и мне было интересно, есть ли простой или общий способ решения этой проблемы.
С наилучшими пожеланиями, Андрей