32 lines
		
	
	
		
			582 B
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			32 lines
		
	
	
		
			582 B
		
	
	
	
		
			C
		
	
	
	
	
	
|   | #include "tai.h"
 | ||
|  | #include "leapsecs.h"
 | ||
|  | #include "caldate.h"
 | ||
|  | #include "caltime.h"
 | ||
|  | 
 | ||
|  | /* XXX: breaks tai encapsulation */ | ||
|  | 
 | ||
|  | void caltime_utc(struct caltime *ct, struct tai *t, int *pwday, int *pyday) | ||
|  | { | ||
|  |   struct tai t2 = *t; | ||
|  |   uint64_t u; | ||
|  |   int leap; | ||
|  |   long s; | ||
|  | 
 | ||
|  |   /* XXX: check for overfow? */ | ||
|  | 
 | ||
|  |   leap = leapsecs_sub(&t2); | ||
|  |   u = t2.x; | ||
|  | 
 | ||
|  |   u += 58486; | ||
|  |   s = (long)(u % ULL(86400)); | ||
|  | 
 | ||
|  |   ct->second = (s % 60) + leap; s /= 60; | ||
|  |   ct->minute = s % 60; s /= 60; | ||
|  |   ct->hour = s; | ||
|  | 
 | ||
|  |   u /= ULL(86400); | ||
|  |   caldate_frommjd(&ct->date, (int64_t)u - LL(53375995543064), pwday, pyday); | ||
|  | 
 | ||
|  |   ct->offset = 0; | ||
|  | } |