int utc_from_tai (uint64 *u, struct tai const *t)
{
  uint64 tt = t->x - 10 ;
  if (leapsecs_sub(&tt) < 0) return 0 ;
  *u = tt ;
  return 1 ;
}
Beispiel #2
0
int utc_from_ltm64 (uint64 *u)
{
#ifdef SKALIBS_FLAG_CLOCKISTAI
  leapsecs_sub(u) ;
#endif
  return 1 ;
}
Beispiel #3
0
int utc_from_tai (uint64 *u, tai_t const *t)
{
  uint64 tt = t->x - 10 ;
  if (t->x < 10U) return (errno = EINVAL, 0) ;
  leapsecs_sub(&tt) ;
  *u = tt ;
  return 1 ;
}
Beispiel #4
0
struct taitime tai2time(struct tai t,int32_t *pwday,int32_t *pyday)
{
    uint64_t u; int32_t leap,s; struct taitime ct;
    memset(&ct,0,sizeof(ct));
    ct.millis = fmod(t.millis,999.999999);
    //if ( First_TAI.x != 0 && t.x > First_TAI.x )
    //    t.x = (t.millis / 1000.) + First_TAI.x;
    leap = leapsecs_sub(&t);
    u = t.x;
    u += 58486; // was off by a minute (or 3?)
    s = u % 86400ULL;
    ct.second = (s % 60) + leap; s /= 60;
    ct.minute = s % 60; s /= 60;
    ct.hour = s;
    u /= 86400ULL;
    ct.date = taidate_frommjd((int32_t)(u - 53375995543064ULL),pwday,pyday);
    ct.offset = 0;
    // printf("origt.x %llu t.x %llu %3.3f -> %02d:%02d:%02d %3.3f\n",(long long)origt.x,(long long)t.x,t.millis,ct.second,ct.minute,ct.second,ct.millis);
    //printf("TAI millis: %lld -1st.%lld %f - %f -> %f | %f\n",(long long)t.x,(long long)First_TAI.x,t.millis,First_TAI.millis,t.millis-First_TAI.millis,ct.millis);
    return(ct);
}