Changeset 1256
- Timestamp:
- Jul 21, 2004, 3:03:18 PM (22 years ago)
- Location:
- trunk/psLib
- Files:
-
- 5 edited
-
src/astro/psTime.c (modified) (9 diffs)
-
src/astro/psTime.h (modified) (2 diffs)
-
src/astronomy/psTime.c (modified) (9 diffs)
-
src/astronomy/psTime.h (modified) (2 diffs)
-
test/astronomy/tst_psTime_01.c (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psLib/src/astro/psTime.c
r1248 r1256 6 6 * A collection of functions are required by psLib to manipulate time data. These functions primarily consist 7 7 * 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 within9 * psLib, except those noted, are calculated in terms of TAI time, which is approxinmately 32 seconds faster10 * 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. 11 11 * 12 12 * @author Ross Harman, MHPCC 13 13 * 14 * @version $Revision: 1. 3$ $Name: not supported by cvs2svn $15 * @date $Date: 2004-07-2 1 01:56:28$14 * @version $Revision: 1.4 $ $Name: not supported by cvs2svn $ 15 * @date $Date: 2004-07-22 01:02:53 $ 16 16 * 17 17 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 153 153 154 154 // 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]; 156 156 157 157 return time; … … 280 280 } 281 281 282 month = atoi(strtok( tempString, "/"));282 month = atoi(strtok(NULL, "/")); 283 283 if(month<1 || month>12) { 284 284 psError(__func__,"Month must have a value from 0 to 11. Value: %d", month); 285 285 } 286 286 287 day = atoi(strtok( tempString, ","));287 day = atoi(strtok(NULL, ",")); 288 288 if(day<1 || day>31) { 289 289 psError(__func__,"Day must have a value from 1 to 31. Value: %d", day); 290 290 } 291 291 292 hour = atoi(strtok( tempString, ":"));292 hour = atoi(strtok(NULL, ":")); 293 293 if(hour<0 || hour>23) { 294 294 psError(__func__,"Hour must have a value from 0 to 23. Value: %d", hour); 295 295 } 296 296 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) { 299 304 psError(__func__,"Second must have a value from 0 to 59. Value: %d", second); 300 305 } 301 306 302 millisecond = atoi(strtok( tempString, "X"));307 millisecond = atoi(strtok(NULL, "X")); 303 308 if(millisecond<0 || millisecond>1000) { 304 309 psError(__func__,"Second must have a value from 0 to 999. Value: %d", millisecond); … … 311 316 tmTime.tm_min = minute; 312 317 tmTime.tm_sec = second; 318 tmTime.tm_isdst = -1; 313 319 314 320 // Convert tm time to psTime … … 326 332 327 333 // 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]; 330 335 outTime.tv_usec = time.tv_usec; 331 336 CHECK_NEGATIVE_TIME_STRUCT(outTime,outTime); 332 337 333 return time;338 return outTime; 334 339 } 335 340 … … 406 411 { 407 412 int i; 408 int m;409 413 int n; 410 414 int y; … … 414 418 415 419 i= 0; 416 m = 0;417 420 n = 0; 418 421 y = 0; … … 429 432 } 430 433 434 // Back to 1969 431 435 n = time->tm_year + 1900 - 1; 432 436 epoch = (time->tm_year - 70) * SEC_PER_YEAR + ((n/4 - n/100 + n/400) - … … 435 439 y = time->tm_year + 1900; 436 440 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)) { 441 446 epoch += SEC_PER_DAY; 442 447 } 443 444 if(++m > 11) { 445 m = 0; 446 y++; 447 } 448 } 449 448 } 449 450 // Add everything 450 451 epoch += (time->tm_mday - 1) * SEC_PER_DAY; 451 452 epoch += time->tm_hour *SEC_PER_HOUR + time->tm_min * SEC_PER_MINUTE + time->tm_sec; 452 453 454 // Create psTime 453 455 outTime.tv_usec = 0; 454 456 outTime.tv_sec = epoch; 455 457 456 return outTime; 457 } 458 CHECK_NEGATIVE_TIME_STRUCT(outTime,outTime); 459 460 return outTime; 461 } -
trunk/psLib/src/astro/psTime.h
r1247 r1256 12 12 * @author Ross Harman, MHPCC 13 13 * 14 * @version $Revision: 1. 4$ $Name: not supported by cvs2svn $15 * @date $Date: 2004-07-2 1 01:29:22$14 * @version $Revision: 1.5 $ $Name: not supported by cvs2svn $ 15 * @date $Date: 2004-07-22 01:03:00 $ 16 16 * 17 17 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 41 41 42 42 /** Seconds per minute */ 43 #define SEC_PER_MINUTE 6043 #define SEC_PER_MINUTE 60.0 44 44 45 45 /** Seconds per hour */ 46 #define SEC_PER_HOUR 60*SEC_PER_MINUTE46 #define SEC_PER_HOUR (60.0*SEC_PER_MINUTE) 47 47 48 48 /** Seconds per day */ 49 #define SEC_PER_DAY 24*SEC_PER_HOUR49 #define SEC_PER_DAY (24.0*SEC_PER_HOUR) 50 50 51 51 /** Seconds per year */ 52 #define SEC_PER_YEAR 365*SEC_PER_DAY52 #define SEC_PER_YEAR (365.0*SEC_PER_DAY) 53 53 54 54 /** Microseconds per day */ -
trunk/psLib/src/astronomy/psTime.c
r1248 r1256 6 6 * A collection of functions are required by psLib to manipulate time data. These functions primarily consist 7 7 * 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 within9 * psLib, except those noted, are calculated in terms of TAI time, which is approxinmately 32 seconds faster10 * 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. 11 11 * 12 12 * @author Ross Harman, MHPCC 13 13 * 14 * @version $Revision: 1. 3$ $Name: not supported by cvs2svn $15 * @date $Date: 2004-07-2 1 01:56:28$14 * @version $Revision: 1.4 $ $Name: not supported by cvs2svn $ 15 * @date $Date: 2004-07-22 01:02:53 $ 16 16 * 17 17 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 153 153 154 154 // 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]; 156 156 157 157 return time; … … 280 280 } 281 281 282 month = atoi(strtok( tempString, "/"));282 month = atoi(strtok(NULL, "/")); 283 283 if(month<1 || month>12) { 284 284 psError(__func__,"Month must have a value from 0 to 11. Value: %d", month); 285 285 } 286 286 287 day = atoi(strtok( tempString, ","));287 day = atoi(strtok(NULL, ",")); 288 288 if(day<1 || day>31) { 289 289 psError(__func__,"Day must have a value from 1 to 31. Value: %d", day); 290 290 } 291 291 292 hour = atoi(strtok( tempString, ":"));292 hour = atoi(strtok(NULL, ":")); 293 293 if(hour<0 || hour>23) { 294 294 psError(__func__,"Hour must have a value from 0 to 23. Value: %d", hour); 295 295 } 296 296 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) { 299 304 psError(__func__,"Second must have a value from 0 to 59. Value: %d", second); 300 305 } 301 306 302 millisecond = atoi(strtok( tempString, "X"));307 millisecond = atoi(strtok(NULL, "X")); 303 308 if(millisecond<0 || millisecond>1000) { 304 309 psError(__func__,"Second must have a value from 0 to 999. Value: %d", millisecond); … … 311 316 tmTime.tm_min = minute; 312 317 tmTime.tm_sec = second; 318 tmTime.tm_isdst = -1; 313 319 314 320 // Convert tm time to psTime … … 326 332 327 333 // 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]; 330 335 outTime.tv_usec = time.tv_usec; 331 336 CHECK_NEGATIVE_TIME_STRUCT(outTime,outTime); 332 337 333 return time;338 return outTime; 334 339 } 335 340 … … 406 411 { 407 412 int i; 408 int m;409 413 int n; 410 414 int y; … … 414 418 415 419 i= 0; 416 m = 0;417 420 n = 0; 418 421 y = 0; … … 429 432 } 430 433 434 // Back to 1969 431 435 n = time->tm_year + 1900 - 1; 432 436 epoch = (time->tm_year - 70) * SEC_PER_YEAR + ((n/4 - n/100 + n/400) - … … 435 439 y = time->tm_year + 1900; 436 440 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)) { 441 446 epoch += SEC_PER_DAY; 442 447 } 443 444 if(++m > 11) { 445 m = 0; 446 y++; 447 } 448 } 449 448 } 449 450 // Add everything 450 451 epoch += (time->tm_mday - 1) * SEC_PER_DAY; 451 452 epoch += time->tm_hour *SEC_PER_HOUR + time->tm_min * SEC_PER_MINUTE + time->tm_sec; 452 453 454 // Create psTime 453 455 outTime.tv_usec = 0; 454 456 outTime.tv_sec = epoch; 455 457 456 return outTime; 457 } 458 CHECK_NEGATIVE_TIME_STRUCT(outTime,outTime); 459 460 return outTime; 461 } -
trunk/psLib/src/astronomy/psTime.h
r1247 r1256 12 12 * @author Ross Harman, MHPCC 13 13 * 14 * @version $Revision: 1. 4$ $Name: not supported by cvs2svn $15 * @date $Date: 2004-07-2 1 01:29:22$14 * @version $Revision: 1.5 $ $Name: not supported by cvs2svn $ 15 * @date $Date: 2004-07-22 01:03:00 $ 16 16 * 17 17 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 41 41 42 42 /** Seconds per minute */ 43 #define SEC_PER_MINUTE 6043 #define SEC_PER_MINUTE 60.0 44 44 45 45 /** Seconds per hour */ 46 #define SEC_PER_HOUR 60*SEC_PER_MINUTE46 #define SEC_PER_HOUR (60.0*SEC_PER_MINUTE) 47 47 48 48 /** Seconds per day */ 49 #define SEC_PER_DAY 24*SEC_PER_HOUR49 #define SEC_PER_DAY (24.0*SEC_PER_HOUR) 50 50 51 51 /** Seconds per year */ 52 #define SEC_PER_YEAR 365*SEC_PER_DAY52 #define SEC_PER_YEAR (365.0*SEC_PER_DAY) 53 53 54 54 /** Microseconds per day */ -
trunk/psLib/test/astronomy/tst_psTime_01.c
r1223 r1256 4 4 * 5 5 * 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 16 20 * 17 21 * @author Ross Harman, MHPCC 18 22 * 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 $ 21 25 * 22 26 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 29 33 int main(int argc, char* argv[]) 30 34 { 35 psTime time; 36 psTime testTime; 31 37 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); 32 150 33 151 return 0;
Note:
See TracChangeset
for help on using the changeset viewer.
