Если бы я хотел работать, используя даты и время, уходящие миллионы лет в прошлое / будущее, как бы я это сделал? - PullRequest
3 голосов
/ 15 декабря 2008

Если бы я хотел работать с датами и временем, уходящим на миллионы лет в прошлое / будущее, как бы я делал это в C / C ++ / C #?

Например, скажем, я работал над алгоритмом, чтобы увидеть, ударит ли комета на землю? Существуют ли коммерческие или открытые библиотеки, которые делают это?

Большинство значений DateTime работают только в течение нескольких лет. Юниксы закончатся только в 2038 году!

Tony

Ответы [ 9 ]

7 голосов
/ 15 декабря 2008

Астрономы используют свой собственный календарь, отличный от гражданского, григорианского календаря.

Астрономические юлианские даты - это то, что они используют.

Посмотрите на http://en.wikipedia.org/wiki/Julian_day

Вот типичный пакет: Солнечные часы .

6 голосов
/ 15 декабря 2008

Вы не можете определить будущие даты UTC до секунды, поскольку существует високосных секунд (одна из которых назначена на 31 декабря, через пару недель). Никто не знает, когда в календарь будут добавлены високосные секунды, потому что никто не знает, с какой скоростью будет вращаться Земля в будущем.

5 голосов
/ 15 декабря 2008

Ну, не для того, чтобы быть тупым или что-то в этом роде, но если он ударит по земле примерно через 1700 лет, я не думаю, что нам нужно знать фактическую дату.

Если это не вторник.

Никогда не мог освоиться во вторник.

4 голосов
/ 15 декабря 2008

Если промежуток времени, предлагаемый типичными переменными datetime, слишком мал, у вас есть два варианта:

  1. Использование переменной с большей областью действия (т. Е. Больше битов)
  2. с учетом меньшей точности

Какой из них выбрать, зависит от того, что именно вы хотите сделать. Но в целом мой совет - вариант № 2. Когда мы говорим о веках или тысячелетиях, миллисекунды обычно не так важны ...

1 голос
/ 25 мая 2010

64-битный time_t будет работать до 292 277 026 596 лет.

1 голос
/ 16 декабря 2008

Когда дело доходит до астрономических событий, не имеет значения, какая часть земли обращена к Солнцу, т.е. имеет дневной свет. Поэтому календари и даты тоже не имеют значения. Вы должны просто использовать время. Например, 64-битного time_t вполне достаточно.

Даже когда вы используете время, имейте в виду, что системы из трех тел (например, Земля-Солнце-Юпитер) хаотичны. Прогнозирование положения Земли в далеком будущем имеет довольно большой предел погрешности.

0 голосов
/ 16 декабря 2008

Я думаю, что проблема не в том, ударит ли комета в пятницу или воскресенье, а в том, ударит комета или нет. Я предполагаю, что это означает, что вы можете смоделировать время в тысячных долях секунды как тип длиной 64 бита. Вы можете решить 213 миллиардов лет. Затем вы можете иметь подпрограмму, которая сопоставляет это значение со значениями полной даты ...

0 голосов
/ 15 декабря 2008

Объект DateTime в C # перемещается с 1.1.0001 по 12.31.9999. Он еще более ограничен в SQL Server, где самая ранняя дата - что-то вроде 1735 года.

Вам, скорее всего, придется написать что-то самостоятельно или попытаться отобрать что-то у кого-то другого. Продвигаться вперед, вероятно, проще (за исключением второго шага). Есть довольно хорошая информация о календарях здесь .

0 голосов
/ 15 декабря 2008

Вам просто нужно больше битов, чтобы сохранить значение и / или использовать большие приращения времени для представления временной меткой. Вместо ms делайте годы, затем, возможно, используйте математическую библиотеку / API, предназначенную для очень больших чисел, если этого недостаточно (и в зависимости от ваших требований к точности), или используйте число с плавающей запятой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...