IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 1256


Ignore:
Timestamp:
Jul 21, 2004, 3:03:18 PM (22 years ago)
Author:
harman
Message:

Added more functions

Location:
trunk/psLib
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/psLib/src/astro/psTime.c

    r1248 r1256  
    66 *  A collection of functions are required by psLib to manipulate time data. These functions primarily consist
    77 *  of conversions between specific time formats.  PSLib currently uses the UNIX timeval time system as the
    8  *  base upon which International Atomic Time (TAI) time is calculated. All time conversion functions within
    9  *  psLib, except those noted, are calculated in terms of TAI time, which is approxinmately 32 seconds faster
    10  *  than UTC/timeval.
     8 *  base upon which International Atomic Time (TAI) time is calculated. TAI time varies over time due to the
     9 *  earth's rotation and the movement of the continental plates. It is currentls 32 seconds faster than
     10 *  UTC/timeval time.
    1111 *
    1212 *  @author Ross Harman, MHPCC
    1313 *
    14  *  @version $Revision: 1.3 $ $Name: not supported by cvs2svn $
    15  *  @date $Date: 2004-07-21 01:56:28 $
     14 *  @version $Revision: 1.4 $ $Name: not supported by cvs2svn $
     15 *  @date $Date: 2004-07-22 01:02:53 $
    1616 *
    1717 *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    153153
    154154    // Add most current leapseconds value to UTC time to get TAI time
    155     time.tv_sec += leapseconds[NUM_LEAPSECOND_UPDATES][1];
     155    time.tv_sec += leapseconds[NUM_LEAPSECOND_UPDATES-1][1];
    156156
    157157    return time;
     
    280280    }
    281281
    282     month = atoi(strtok(tempString, "/"));
     282    month = atoi(strtok(NULL, "/"));
    283283    if(month<1 || month>12) {
    284284        psError(__func__,"Month must have a value from 0 to 11. Value: %d", month);
    285285    }
    286286
    287     day = atoi(strtok(tempString, ","));
     287    day = atoi(strtok(NULL, ","));
    288288    if(day<1 || day>31) {
    289289        psError(__func__,"Day must have a value from 1 to 31. Value: %d", day);
    290290    }
    291291
    292     hour = atoi(strtok(tempString, ":"));
     292    hour = atoi(strtok(NULL, ":"));
    293293    if(hour<0 || hour>23) {
    294294        psError(__func__,"Hour must have a value from 0 to 23. Value: %d", hour);
    295295    }
    296296
    297     second = atoi(strtok(tempString, "."));
    298     if(second<0 || second>60) {
     297    minute = atoi(strtok(NULL, ":"));
     298    if(minute<0 || minute>59) {
     299        psError(__func__,"Minute must have a value from 0 to 59. Value: %d", minute);
     300    }
     301
     302    second = atoi(strtok(NULL, "."));
     303    if(second<0 || second>59) {
    299304        psError(__func__,"Second must have a value from 0 to 59. Value: %d", second);
    300305    }
    301306
    302     millisecond = atoi(strtok(tempString, "X"));
     307    millisecond = atoi(strtok(NULL, "X"));
    303308    if(millisecond<0 || millisecond>1000) {
    304309        psError(__func__,"Second must have a value from 0 to 999. Value: %d", millisecond);
     
    311316    tmTime.tm_min = minute;
    312317    tmTime.tm_sec = second;
     318    tmTime.tm_isdst = -1;
    313319
    314320    // Convert tm time to psTime
     
    326332
    327333    // Convert UTC time to psTime/TAI
    328     outTime.tv_sec = time.tv_sec + leapseconds[NUM_LEAPSECOND_UPDATES][1];
    329     ;
     334    outTime.tv_sec = time.tv_sec + leapseconds[NUM_LEAPSECOND_UPDATES-1][1];
    330335    outTime.tv_usec = time.tv_usec;
    331336    CHECK_NEGATIVE_TIME_STRUCT(outTime,outTime);
    332337
    333     return time;
     338    return outTime;
    334339}
    335340
     
    406411{
    407412    int i;
    408     int m;
    409413    int n;
    410414    int y;
     
    414418
    415419    i= 0;
    416     m = 0;
    417420    n = 0;
    418421    y = 0;
     
    429432    }
    430433
     434    // Back to 1969
    431435    n = time->tm_year + 1900 - 1;
    432436    epoch = (time->tm_year - 70) * SEC_PER_YEAR + ((n/4 - n/100 + n/400) -
     
    435439    y = time->tm_year + 1900;
    436440
    437     for(i = 0; i < time->tm_mon; i++)
    438     {
    439         epoch += mon [m] * SEC_PER_DAY;
    440         if(m == 1 && y % 4 == 0 && (y % 100 != 0 || y % 400 == 0)) {
     441    // Adjust for leap years
     442    for(i = 0; i<time->tm_mon; i++)
     443    {
     444        epoch += mon [i] * SEC_PER_DAY;
     445        if(i == 1 && y % 4 == 0 && (y % 100 != 0 || y % 400 == 0)) {
    441446            epoch += SEC_PER_DAY;
    442447        }
    443 
    444         if(++m > 11) {
    445             m = 0;
    446             y++;
    447         }
    448     }
    449 
     448    }
     449
     450    // Add everything
    450451    epoch += (time->tm_mday - 1) * SEC_PER_DAY;
    451452    epoch += time->tm_hour *SEC_PER_HOUR + time->tm_min * SEC_PER_MINUTE + time->tm_sec;
    452453
     454    // Create psTime
    453455    outTime.tv_usec = 0;
    454456    outTime.tv_sec = epoch;
    455457
    456     return outTime;
    457 }
     458    CHECK_NEGATIVE_TIME_STRUCT(outTime,outTime);
     459
     460    return outTime;
     461}
  • trunk/psLib/src/astro/psTime.h

    r1247 r1256  
    1212 *  @author Ross Harman, MHPCC
    1313 *
    14  *  @version $Revision: 1.4 $ $Name: not supported by cvs2svn $
    15  *  @date $Date: 2004-07-21 01:29:22 $
     14 *  @version $Revision: 1.5 $ $Name: not supported by cvs2svn $
     15 *  @date $Date: 2004-07-22 01:03:00 $
    1616 *
    1717 *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    4141
    4242/** Seconds per minute */
    43 #define  SEC_PER_MINUTE   60
     43#define  SEC_PER_MINUTE 60.0
    4444
    4545/** Seconds per hour */
    46 #define  SEC_PER_HOUR     60*SEC_PER_MINUTE
     46#define  SEC_PER_HOUR (60.0*SEC_PER_MINUTE)
    4747
    4848/** Seconds per day */
    49 #define  SEC_PER_DAY      24*SEC_PER_HOUR
     49#define  SEC_PER_DAY (24.0*SEC_PER_HOUR)
    5050
    5151/** Seconds per year */
    52 #define  SEC_PER_YEAR    365*SEC_PER_DAY
     52#define  SEC_PER_YEAR (365.0*SEC_PER_DAY)
    5353
    5454/** Microseconds per day */
  • trunk/psLib/src/astronomy/psTime.c

    r1248 r1256  
    66 *  A collection of functions are required by psLib to manipulate time data. These functions primarily consist
    77 *  of conversions between specific time formats.  PSLib currently uses the UNIX timeval time system as the
    8  *  base upon which International Atomic Time (TAI) time is calculated. All time conversion functions within
    9  *  psLib, except those noted, are calculated in terms of TAI time, which is approxinmately 32 seconds faster
    10  *  than UTC/timeval.
     8 *  base upon which International Atomic Time (TAI) time is calculated. TAI time varies over time due to the
     9 *  earth's rotation and the movement of the continental plates. It is currentls 32 seconds faster than
     10 *  UTC/timeval time.
    1111 *
    1212 *  @author Ross Harman, MHPCC
    1313 *
    14  *  @version $Revision: 1.3 $ $Name: not supported by cvs2svn $
    15  *  @date $Date: 2004-07-21 01:56:28 $
     14 *  @version $Revision: 1.4 $ $Name: not supported by cvs2svn $
     15 *  @date $Date: 2004-07-22 01:02:53 $
    1616 *
    1717 *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    153153
    154154    // Add most current leapseconds value to UTC time to get TAI time
    155     time.tv_sec += leapseconds[NUM_LEAPSECOND_UPDATES][1];
     155    time.tv_sec += leapseconds[NUM_LEAPSECOND_UPDATES-1][1];
    156156
    157157    return time;
     
    280280    }
    281281
    282     month = atoi(strtok(tempString, "/"));
     282    month = atoi(strtok(NULL, "/"));
    283283    if(month<1 || month>12) {
    284284        psError(__func__,"Month must have a value from 0 to 11. Value: %d", month);
    285285    }
    286286
    287     day = atoi(strtok(tempString, ","));
     287    day = atoi(strtok(NULL, ","));
    288288    if(day<1 || day>31) {
    289289        psError(__func__,"Day must have a value from 1 to 31. Value: %d", day);
    290290    }
    291291
    292     hour = atoi(strtok(tempString, ":"));
     292    hour = atoi(strtok(NULL, ":"));
    293293    if(hour<0 || hour>23) {
    294294        psError(__func__,"Hour must have a value from 0 to 23. Value: %d", hour);
    295295    }
    296296
    297     second = atoi(strtok(tempString, "."));
    298     if(second<0 || second>60) {
     297    minute = atoi(strtok(NULL, ":"));
     298    if(minute<0 || minute>59) {
     299        psError(__func__,"Minute must have a value from 0 to 59. Value: %d", minute);
     300    }
     301
     302    second = atoi(strtok(NULL, "."));
     303    if(second<0 || second>59) {
    299304        psError(__func__,"Second must have a value from 0 to 59. Value: %d", second);
    300305    }
    301306
    302     millisecond = atoi(strtok(tempString, "X"));
     307    millisecond = atoi(strtok(NULL, "X"));
    303308    if(millisecond<0 || millisecond>1000) {
    304309        psError(__func__,"Second must have a value from 0 to 999. Value: %d", millisecond);
     
    311316    tmTime.tm_min = minute;
    312317    tmTime.tm_sec = second;
     318    tmTime.tm_isdst = -1;
    313319
    314320    // Convert tm time to psTime
     
    326332
    327333    // Convert UTC time to psTime/TAI
    328     outTime.tv_sec = time.tv_sec + leapseconds[NUM_LEAPSECOND_UPDATES][1];
    329     ;
     334    outTime.tv_sec = time.tv_sec + leapseconds[NUM_LEAPSECOND_UPDATES-1][1];
    330335    outTime.tv_usec = time.tv_usec;
    331336    CHECK_NEGATIVE_TIME_STRUCT(outTime,outTime);
    332337
    333     return time;
     338    return outTime;
    334339}
    335340
     
    406411{
    407412    int i;
    408     int m;
    409413    int n;
    410414    int y;
     
    414418
    415419    i= 0;
    416     m = 0;
    417420    n = 0;
    418421    y = 0;
     
    429432    }
    430433
     434    // Back to 1969
    431435    n = time->tm_year + 1900 - 1;
    432436    epoch = (time->tm_year - 70) * SEC_PER_YEAR + ((n/4 - n/100 + n/400) -
     
    435439    y = time->tm_year + 1900;
    436440
    437     for(i = 0; i < time->tm_mon; i++)
    438     {
    439         epoch += mon [m] * SEC_PER_DAY;
    440         if(m == 1 && y % 4 == 0 && (y % 100 != 0 || y % 400 == 0)) {
     441    // Adjust for leap years
     442    for(i = 0; i<time->tm_mon; i++)
     443    {
     444        epoch += mon [i] * SEC_PER_DAY;
     445        if(i == 1 && y % 4 == 0 && (y % 100 != 0 || y % 400 == 0)) {
    441446            epoch += SEC_PER_DAY;
    442447        }
    443 
    444         if(++m > 11) {
    445             m = 0;
    446             y++;
    447         }
    448     }
    449 
     448    }
     449
     450    // Add everything
    450451    epoch += (time->tm_mday - 1) * SEC_PER_DAY;
    451452    epoch += time->tm_hour *SEC_PER_HOUR + time->tm_min * SEC_PER_MINUTE + time->tm_sec;
    452453
     454    // Create psTime
    453455    outTime.tv_usec = 0;
    454456    outTime.tv_sec = epoch;
    455457
    456     return outTime;
    457 }
     458    CHECK_NEGATIVE_TIME_STRUCT(outTime,outTime);
     459
     460    return outTime;
     461}
  • trunk/psLib/src/astronomy/psTime.h

    r1247 r1256  
    1212 *  @author Ross Harman, MHPCC
    1313 *
    14  *  @version $Revision: 1.4 $ $Name: not supported by cvs2svn $
    15  *  @date $Date: 2004-07-21 01:29:22 $
     14 *  @version $Revision: 1.5 $ $Name: not supported by cvs2svn $
     15 *  @date $Date: 2004-07-22 01:03:00 $
    1616 *
    1717 *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    4141
    4242/** Seconds per minute */
    43 #define  SEC_PER_MINUTE   60
     43#define  SEC_PER_MINUTE 60.0
    4444
    4545/** Seconds per hour */
    46 #define  SEC_PER_HOUR     60*SEC_PER_MINUTE
     46#define  SEC_PER_HOUR (60.0*SEC_PER_MINUTE)
    4747
    4848/** Seconds per day */
    49 #define  SEC_PER_DAY      24*SEC_PER_HOUR
     49#define  SEC_PER_DAY (24.0*SEC_PER_HOUR)
    5050
    5151/** Seconds per year */
    52 #define  SEC_PER_YEAR    365*SEC_PER_DAY
     52#define  SEC_PER_YEAR (365.0*SEC_PER_DAY)
    5353
    5454/** Microseconds per day */
  • trunk/psLib/test/astronomy/tst_psTime_01.c

    r1223 r1256  
    44 *
    55 *  This test driver contains the following tests for psTime:
    6  *     A) 
    7  *     B) 
    8  *     C) 
    9  *     D) 
    10  *     E) 
    11  *     F) 
    12  *     G) 
    13  *     H) 
    14  *     I) 
    15  *     J) 
     6 *     A) Get current TAI time
     7 *     B) Print test time
     8 *     C) Convert psTime to ISO time
     9 *     D) Convert ISO time to psTime
     10 *     E) Convert psTime to UTC time
     11 *     F) Convert UTC time to psTime
     12 *     G) Convert psTime to MJD time
     13 *     H) Convert MJD time to psTime
     14 *     I) Convert psTime to JD time
     15 *     J) Convert JD time to psTime
     16 *     K) Convert psTime to timeval time
     17 *     L) Convert timeval time to psTime
     18 *     M) Convert psTime to tm time
     19 *     N) Convert tm time to psTime
    1620 *
    1721 *  @author  Ross Harman, MHPCC
    1822 *
    19  *  @version $Revision: 1.1 $  $Name: not supported by cvs2svn $
    20  *  @date  $Date: 2004-07-15 19:00:29 $
     23 *  @version $Revision: 1.2 $  $Name: not supported by cvs2svn $
     24 *  @date  $Date: 2004-07-22 01:03:18 $
    2125 *
    2226 *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    2933int main(int argc, char* argv[])
    3034{
     35    psTime time;
     36    psTime testTime;
    3137
     38    // Test time was taken at July 21, 2004 at 18:22:24.272044
     39    testTime.tv_sec = 1090434144;
     40    testTime.tv_usec = 272044;
     41
     42
     43    // Test A - Get current TAI time
     44    printPositiveTestHeader(stdout,"psTime", "Get current TAI time");
     45    time = psTimeGetTime();
     46    printFooter(stdout, "psTime", "Get current TAI time", true);
     47
     48
     49    //Test B - Print test time
     50    printPositiveTestHeader(stdout,"psTime", "Print test time");
     51    printf("Test time: July 21, 2004 at 18:22:24.272044\n");
     52    printf("Test time: Seconds = %ld Microseconds = %ld\n", (long)testTime.tv_sec, (long)testTime.tv_usec);
     53    printFooter(stdout, "psTime", "Print test time", true);
     54
     55
     56    // Test C - Convert psTime to ISO time
     57    printPositiveTestHeader(stdout,"psTime", "Convert psTime to ISO time");
     58    char *isoString;
     59    isoString = psTimeToISO(testTime);
     60    printf("ISO = %s\n", isoString);
     61    printFooter(stdout, "psTime", "Convert psTime to ISO time", true);
     62
     63
     64    // Test D - Convert ISO time to psTime
     65    printPositiveTestHeader(stdout,"psTime", "Convert ISO time to psTime");
     66    time = psISOToTime(isoString);
     67    printf("psTime: Seconds = %ld Microseconds = %ld\n", (long)time.tv_sec, (long)time.tv_usec);
     68    psFree(isoString);
     69    printFooter(stdout, "psTime", "Convert ISO time to psTime", true);
     70
     71
     72    // Test E - Convert psTime to UTC time
     73    printPositiveTestHeader(stdout,"psTime", "Convert psTime time to UTC time");
     74    time = psTimeToUTC(testTime);
     75    printf("psTime: Seconds = %ld Microseconds = %ld\n", (long)time.tv_sec, (long)time.tv_usec);
     76    printFooter(stdout, "psTime", "Convert psTime time to UTC time", true);
     77
     78
     79    // Test F - Convert UTC time to psTime
     80    printPositiveTestHeader(stdout,"psTime", "Convert UTC time to psTime");
     81    time = psUTCToTime(time);
     82    printf("psTime: Seconds = %ld Microseconds = %ld\n", (long)time.tv_sec, (long)time.tv_usec);
     83    printFooter(stdout, "psTime", "Convert UTC time to psTime", true);
     84
     85
     86    // Test G - Convert psTime to MJD time
     87    printPositiveTestHeader(stdout,"psTime", "Convert psTime to MJD time");
     88    double mjdTime = 0.0;
     89    mjdTime = psTimeToMJD(testTime);
     90    printf("MJD = %f\n", mjdTime);
     91    printFooter(stdout, "psTime", "Convert psTime to MJD time", true);
     92
     93
     94    // Test H - Convert MJD time to psTime
     95    printPositiveTestHeader(stdout,"psTime", "Convert MJD time to psTime");
     96    time = psMJDToTime(mjdTime);
     97    printf("psTime: Seconds = %ld Microseconds = %ld\n", (long)time.tv_sec, (long)time.tv_usec);
     98    printFooter(stdout, "psTime", "Convert MJD time to psTime", true);
     99
     100
     101    // Test I - Convert psTime to JD time
     102    printPositiveTestHeader(stdout,"psTime", "Convert psTime to JD time");
     103    double jdTime = 0.0;
     104    jdTime = psTimeToJD(testTime);
     105    printf("JD = %f\n", jdTime);
     106    printFooter(stdout, "psTime", "Convert psTime to JD time", true);
     107
     108
     109    // Test J - Convert JD time to psTime
     110    printPositiveTestHeader(stdout,"psTime", "Convert JD time to psTime");
     111    time = psJDToTime(jdTime);
     112    printf("psTime: Seconds = %ld Microseconds = %ld\n", (long)time.tv_sec, (long)time.tv_usec);
     113    printFooter(stdout, "psTime", "Convert JD time to psTime", true);
     114
     115
     116    // Test K - Convert psTime to timeval time
     117    printPositiveTestHeader(stdout,"psTime", "Convert psTime to timeval time");
     118    struct timeval timevalTime;
     119    timevalTime = psTimeToTimeval(testTime);
     120    printf("timevalTime: Seconds = %ld Microseconds = %ld\n", (long)timevalTime.tv_sec, (long)timevalTime.tv_usec);
     121    printFooter(stdout, "psTime", "Convert psTime to timeval time", true);
     122
     123
     124    // Test L - Convert timeval time to psTime
     125    printPositiveTestHeader(stdout,"psTime", "Convert timeval time to psTime");
     126    time = psTimevalToTime(&timevalTime);
     127    printf("psTime: Seconds = %ld Microseconds = %ld\n", (long)time.tv_sec, (long)time.tv_usec);
     128    printFooter(stdout, "psTime", "Convert timeval time to psTime", true);
     129
     130
     131    // Test M - Convert psTime to tm time
     132    printPositiveTestHeader(stdout,"psTime", "Convert psTime to tm time");
     133    struct tm *tmTime;
     134    tmTime = psTimeToTM(testTime);
     135    printf("tmTime:\n");
     136    printf("tmTime->tm_year = %d\n", tmTime->tm_year);
     137    printf("tmTime->tm_mon = %d\n", tmTime->tm_mon);
     138    printf("tmTime->tm_mday = %d\n", tmTime->tm_mday);
     139    printf("tmTime->tm_hour = %d\n", tmTime->tm_hour);
     140    printf("tmTime->tm_min = %d\n", tmTime->tm_min);
     141    printf("tmTime->tm_sec = %d\n", tmTime->tm_sec);
     142    printFooter(stdout, "psTime", "Convert psTime to tm time", true);
     143
     144
     145    // Test N - Convert tm time to psTime
     146    printPositiveTestHeader(stdout, "psTime", "Convert tm time to psTime");
     147    time = psTMToTime(tmTime);
     148    printf("psTime: Seconds = %ld Microseconds = %ld\n", (long)time.tv_sec, (long)time.tv_usec);
     149    printFooter(stdout, "psTime", "Convert tm time to psTime", true);
    32150
    33151    return 0;
Note: See TracChangeset for help on using the changeset viewer.