Как я могу использовать мультитач-приложения в Ubuntu 12.04? [закрыто]

OADate похож на Julian Dates, но использует другую отправную точку (30 декабря 1899 г. против 1 января 4713 г. до н.э.) и другую точку «нового дня». Джулиан Датс считает, что полдень станет началом нового дня, OADates используют современное определение, полночь.

Юлиан. Дата полуночи, 30 декабря 1899 года, 2415018.5. Этот метод должен дать вам правильные значения:

public static double ToJulianDate(this DateTime date)
{
    return date.ToOADate() + 2415018.5;
}

Что касается алгоритма:

  • if (Month < 3) ...: Чтобы магические числа работали правильно, они поставив февраль на «конец» года.
  • (153 * Month - 457) / 5: Вау, это некоторые серьезные магические числа. Обычно количество дней в каждом месяце составляет 31 28 31 30 31 30 31 31 30 31 30 31, но после этой корректировки в выражении if она становится равной 31 30 31 30 31 31 30 31 30 31 31 28. Или, вычтите 30, и вы получите 1 0 1 0 1 1 0 1 0 1 1 -2. Они создают этот шаблон 1s и 0s, делая это деление в целочисленном пространстве. Переписанная с плавающей запятой, это будет (int)(30.6 * Month - 91.4). 30.6 - среднее число дней в месяц, за исключением февраля (точнее, повторение 30.63). 91,4 - это почти количество дней в 3 средних не-февральских месяцах. (30,6 * 3 - 91,8). Итак, давайте удалим 30, и просто сосредоточимся на этом 0,6 дня. Если мы умножим его на количество месяцев, а затем обрезаем до целого числа, получим шаблон 0s и 1s. 0,6 * 0 = 0,0 -> 0,6 * 1 = 0,6 -> 0 (разность 0) 0,6 * 2 = 1,2 -> 1 (разность 1) 0,6 * 3 = 1,8 -> 1 (разность 0) 0,6 * 4 = 2,4 -> 2 (разность 1) 0,6 * 5 = 3,0 -> 3 (разность 1) 0,6 * 6 = 3,6 -> 3 (разность 0) 0,6 * 7 = 4,2 -> 4 (разность 1) 0,6 * 8 = 4.8 -> 4 (разность 0) См. Схему различий в праве? Это та же самая картина в списке выше, количество дней в каждом месяце минус 30. Вычитание 91.8 компенсирует количество дней в первые три месяца, которые были перенесены в «конец» года, и корректировка он на 0,4 перемещает последовательные разности 1 (0,6 * 4 и 0,6 * 5 в приведенной выше таблице), чтобы выровнять их со смежными месяцами, составляющими 31 день. С февраля наступает конец года, нам не нужно иметь дело с его длиной. Это может быть 45 дней (46 в високосный год), и единственное, что нужно было бы изменить, это постоянное количество дней в году, 365. Обратите внимание, что это зависит от порядка 30 и 31 месяца , Если бы у нас было два месяца подряд, которые составляли 30 дней, это было бы невозможно.
  • 365 * Year: Дни в год
  • (Year / 4) - (Year / 100) + (Year / 400): плюс один височный день каждые 4 года, минус один раз каждые 100, плюс один каждый 400.
  • + 1721119: Это юлианская дата 2 марта 1 года до н.э. Поскольку мы перенесли «начало» календаря с января по март, мы используем это как наше смещение, а не 1 января. Поскольку нет нулевого года, 1 BC получает целочисленное значение 0. Что касается того, почему 2 марта, а не 1 марта, я предполагаю, что это потому, что в этом месяце все еще было немного в конце. Если исходный писатель использовал - 462 вместо - 457 (- 92.4 вместо - 91.4 в математике с плавающей запятой), то смещение было бы до 1 марта.
2
задан Community 13 April 2017 в 12:23
поделиться