Here a couple methods that go to and from modified julian day numbers to <day, 
month, year> values. These algorithms are found in a number of standard sources 
for astronomical computing.

These are methods from a date class that I use. They only thing necessary to 
know about that class is that three of its instance variables are day, month 
and year. Making these methods work as an NSDate category should be 
straightforward.

Tom Wetmore


// Return the modified julian date of this day.
//---------------------------------------------------------------------------------------------
- (long) toJulian
{
        NSInteger m = month;
        NSInteger y = year;
        if (m <= 2) {
                m += 12;
                --y;
        }
        NSInteger b;
        if ((10000L*y + 100*m + day) <= 15821004L)
                b = -2 + ((y + 4716)/4) - 1179; // Julian calendar
        else
                b = (y/400) - (y/100) + (y/4); // Gregorian calendar
        return 365L*y - 679004L + b + (NSInteger)(30.6001*(m + 1)) + day;
}

// Return the day for a modified julian date.
//----------------------------------------------------------------------------------
+ (TWDay*) fromJulian: (long) mjd
{
        long a = mjd + 2400001;
        long b, c, d, e, f;
        
        if (a < 2299161) {
                b = 0;
                c = a + 1524;
        } else {
                b = (long) ((a - 1867216.25)/36524.25);
                c = a + b - (b/4) + 1525;
        }
        d = (long) ((c - 122.1)/365.25);
        e = 365*d + d/4;
        f = (long) ((c - e)/30.6001);
        
        NSInteger day = (int) (c - e - (int) (30.6001*f));
        NSInteger month = (int) (f - 1 - 12*(f/14));
        NSInteger year = (int) (d - 4715 - (7 + month)/10);
        return [[[TWDay alloc] initDay: day month: month year: year] 
autorelease];
}

_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to