2015-08-02 2 views
1

я получил простой Julian Date Calculator со следующим кодом:Julian Date Calculator - Изменение значения каждого запуска

DateTime date = DateTime.UtcNow; 
int month = date.Month > 2 ? date.Month : date.Month + 12; 
int year = month > 2 ? date.Year : date.Year - 1; 
int hour = date.Hour; 
int minute = date.Minute; 
int second = date.Second; 
int millisecond = date.Millisecond; 
double day = date.Day + hour/24.0 + minute/1440.0 + (second + millisecond * 1000)/86400.0; 
int isJulianCalendar = isJulianDate(year, month, date.Day) ? 0 : 2 - year + year/100/4; 

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

Из .pdf Я скопировал выражение, в нем говорится, что формула использует время UT. Есть ли какое-либо существенное отличие от UTC?

+0

Этот расчет выглядит принципиально ошибочным для меня, делая работу, которая не является необходимой, и не выполняет работу, которая необходима. Где вы его нашли? – hvd

+0

Ну, у меня есть некоторые части этого вопроса: http://stackoverflow.com/questions/5248827/convert-datetime-to-julian-date-in-c-sharp-tooadate-safe и некоторые другие части из этого .pdf : http://www.nrel.gov/docs/fy08osti/34302.pdf (стр. 9) .... Мне кажется, это хорошо для меня, но у меня нет таких знаний в этой области – Vlocks

+0

У меня возникли проблемы с просмотром как вы получаете от любой из этих ссылок код, который вы задали в своем вопросе. Во всяком случае, любой расчет, который включает в себя часы, минуты, секунды и миллисекунды, скорее всего, даст разные значения при запуске в другое время дня. Извините, у меня много проблем с пониманием вашего вопроса. – hvd

ответ

0
 
double day = date.Day + hour/24.0 + minute/1440.0 + (second + millisecond * 1000)/86400.0; 

(second + millisecond * 1000) часть кажется предназначенным для расчета доли секунд, но чтобы получить, что вам нужно разделитьmillisecond на 1000.0, не умножать его.

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

+0

Это !! Спасибо, это была проблема. Я также допустил ошибку в 'int isJulianCalendar = isJulianDate (год, месяц, дата.Day)? 0: 2 - год + год/100/4' ... Я должен получить внутреннюю часть этого, а не двойное значение. Еще раз спасибо – Vlocks

1

. NET имеет встроенный JulianCalendar class, который вы, вероятно, должны использовать вместо написания собственного кода.

+0

Имеет ли этот класс непрерывную презентацию дня? – Vlocks

Смежные вопросы