Astro-PAL
view release on metacpan or search on metacpan
erfasrc/src/cal2jd.c view on Meta::CPAN
#include "erfa.h"
int eraCal2jd(int iy, int im, int id, double *djm0, double *djm)
/*
** - - - - - - - - - -
** e r a C a l 2 j d
** - - - - - - - - - -
**
** Gregorian Calendar to Julian Date.
**
** Given:
** iy,im,id int year, month, day in Gregorian calendar (Note 1)
**
** Returned:
** djm0 double MJD zero-point: always 2400000.5
** djm double Modified Julian Date for 0 hrs
**
** Returned (function value):
** int status:
** 0 = OK
** -1 = bad year (Note 3: JD not computed)
** -2 = bad month (JD not computed)
** -3 = bad day (JD computed)
**
** Notes:
**
** 1) The algorithm used is valid from -4800 March 1, but this
** implementation rejects dates before -4799 January 1.
**
** 2) The Julian Date is returned in two pieces, in the usual ERFA
** manner, which is designed to preserve time resolution. The
** Julian Date is available as a single number by adding djm0 and
** djm.
**
** 3) In early eras the conversion is from the "Proleptic Gregorian
** Calendar"; no account is taken of the date(s) of adoption of
** the Gregorian Calendar, nor is the AD/BC numbering convention
** observed.
**
** Reference:
**
** Explanatory Supplement to the Astronomical Almanac,
** P. Kenneth Seidelmann (ed), University Science Books (1992),
** Section 12.92 (p604).
**
** Copyright (C) 2013-2020, NumFOCUS Foundation.
** Derived, with permission, from the SOFA library. See notes at end of file.
*/
{
int j, ly, my;
long iypmy;
/* Earliest year allowed (4800BC) */
const int IYMIN = -4799;
/* Month lengths in days */
static const int mtab[]
= {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
/* Preset status. */
j = 0;
/* Validate year and month. */
if (iy < IYMIN) return -1;
if (im < 1 || im > 12) return -2;
/* If February in a leap year, 1, otherwise 0. */
ly = ((im == 2) && !(iy%4) && (iy%100 || !(iy%400)));
/* Validate day, taking into account leap years. */
if ( (id < 1) || (id > (mtab[im-1] + ly))) j = -3;
( run in 0.536 second using v1.01-cache-2.11-cpan-39bf76dae61 )