/* @file MagDate.java
*
* @author marco corvi
* @date nov 2011
*
* @brief TopoDroid World Magnetic Model
* --------------------------------------------------------
* Copyright This sowftare is distributed under GPL-3.0 or later
* See the file COPYING.
* --------------------------------------------------------
* Implemented after GeomagneticLibrary.c by
* National Geophysical Data Center
* NOAA EGC/2
* 325 Broadway
* Boulder, CO 80303 USA
* Attn: Susan McLean
* Phone: (303) 497-6478
* Email: Susan.McLean@noaa.gov
*/
package com.topodroid.DistoX;
// MAGtype_Date;
class MagDate
{
static int MonthDays[] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
int Year;
int Month;
int Day;
double DecimalYear; /* decimal years */
MagDate( int y, int m, int d )
{
Year = y;
Month = m;
Day = d;
DecimalYear = toDecimalYear( y, m, d );
}
MagDate( double dy )
{
DecimalYear = dy;
Year = (int)(dy);
double f = dy - Year; // fraction
// int ExtraDay = 0;
int yds = 365;
if ((Year % 4 == 0 && Year % 100 != 0) || Year % 400 == 0) {
MonthDays[2] = 29;
// ExtraDay = 1;
yds = 366;
} else {
MonthDays[2] = 28;
}
Day = (int)(yds * f);
Month = 1;
while ( Day > MonthDays[Month]) {
Day -= MonthDays[Month];
Month ++;
}
}
// MAG_DateToYear
double toDecimalYear( int year, int month, int day )
{
double yds = 365.0;
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
MonthDays[2] = 29;
yds = 366.0;
} else {
MonthDays[2] = 28;
}
int temp = 0; /*Total number of days */
for ( int i = 1; i <= month; i++) temp += MonthDays[i - 1];
temp += day;
return (double)( year + (temp - 1) / yds );
}
}