- printf("JDN of current time:\t%f\n", wxDateTime::Now().GetJulianDayNumber());
- printf("JDN of Jan 1, 1900: \t%f\n",
- wxDateTime(1, wxDateTime::Jan, 1900).GetJulianDayNumber());
- printf("JDN of Jan 1, 1BC: \t%f\n",
- wxDateTime(1, wxDateTime::Jan, 0).GetJulianDayNumber());
- printf("JDN 0: \t%f\n",
- wxDateTime(24, wxDateTime::Nov, -4713, 12, 0, 0).GetJulianDayNumber());
+ struct Date
+ {
+ wxDateTime::wxDateTime_t day;
+ wxDateTime::Month month;
+ int year;
+ double jdn;
+ };
+
+ static const Date testDates[] =
+ {
+ { 21, wxDateTime::Jan, 2222, 2532648.5 },
+ { 29, wxDateTime::May, 1976, 2442927.5 },
+ { 1, wxDateTime::Jan, 1970, 2440587.5 },
+ { 1, wxDateTime::Jan, 1900, 2415020.5 },
+ { 15, wxDateTime::Oct, 1582, 2299160.5 },
+ { 4, wxDateTime::Oct, 1582, 2299149.5 },
+ { 1, wxDateTime::Mar, 1, 1721484.5 },
+ { 1, wxDateTime::Jan, 1, 1721425.5 },
+ { 31, wxDateTime::Dec, 0, 1721424.5 },
+ { 1, wxDateTime::Jan, 0, 1721059.5 },
+ { 12, wxDateTime::Aug, -1234, 1270573.5 },
+ { 12, wxDateTime::Aug, -4000, 260313.5 },
+ { 24, wxDateTime::Nov, -4713, -0.5 },
+ };
+
+ for ( size_t n = 0; n < WXSIZEOF(testDates); n++ )
+ {
+ const Date& d = testDates[n];
+ wxDateTime dt(d.day, d.month, d.year);
+ double jdn = dt.GetJulianDayNumber();
+
+ printf("JDN of %s %02d, %4d%s is:\t%f",
+ wxDateTime::GetMonthName(d.month).c_str(),
+ d.day,
+ wxDateTime::ConvertYearToBC(d.year),
+ d.year > 0 ? "AD" : "BC",
+ jdn);
+ if ( jdn == d.jdn )
+ {
+ puts(" (ok)");
+ }
+ else
+ {
+ printf(" (ERROR: should be %f, delta = %f)\n",
+ d.jdn, jdn - d.jdn);
+ }
+ }