【问题标题】:Julian Date Calculator - Changing values each run朱利安日期计算器 - 每次运行更改值
【发布时间】:2015-08-02 16:52:48
【问题描述】:

我有一个简单的儒略日期计算器,代码如下:

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 时间有任何相关差异吗?

【问题讨论】:

  • 这个计算在我看来从根本上是有缺陷的,做不必要的工作,而不做必要的工作。你在哪里找到的?
  • 嗯,我从这个问题中得到了一些部分:stackoverflow.com/questions/5248827/… 和这个.pdf 中的一些其他部分:nrel.gov/docs/fy08osti/34302.pdf(第 9 页)......这对我来说似乎很好,但我不知道'没有这方面的知识
  • 我无法看到您如何从这些链接中的任何一个链接到您在问题中输入的代码。无论如何,当您在一天中的不同时间运行时,任何涉及小时、分钟、秒和毫秒的计算很可能会给出不同的值。抱歉,我很难理解你的问题。
  • 对不起,我会尝试更好地解释:在 .pdf 中,计算它说 is the day of the month with decimal time 的日期因为我对此感到困惑,所以我从另一个问题中复制了这段代码。这就是为什么我从两个链接中获得了一部分。
  • 但是如果你包括时间,那么当你在不同的时间运行它时,你怎么能不得到不同的值呢?在我看来,你得到不同的值是很正常的。

标签: c# algorithm


【解决方案1】:

.NET 有一个内置的JulianCalendar class,您应该使用它而不是编写自己的代码。

【讨论】:

  • 这堂课有不间断的一天介绍吗?
【解决方案2】:
双日 = date.Day + 小时 / 24.0 + 分钟 / 1440.0 + (秒 + 毫秒 * 1000) / 86400.0;

(second + millisecond * 1000) 部分似乎用于计算小数秒,但要得到它,您需要将millisecond 1000.0,而不是相乘。

请注意,正如我在 cmets 中指出的那样,这仅解决了您所询问的直接问题,实际正确计算儒略日可能还不够。但是,由于您自己已经发布了工作答案的链接,显示了计算儒略日没有时间,您应该能够从这里开始工作。

【讨论】:

  • 这个!!谢谢,这就是问题所在。我在int isJulianCalendar = isJulianDate(year, month, date.Day) ? 0 : 2 - year + year / 100 / 4 中也犯了一个错误……我应该得到它的 int 部分,而不是 double 值。再次感谢您
猜你喜欢
  • 1970-01-01
  • 2015-09-17
  • 1970-01-01
  • 1970-01-01
  • 2020-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多