*/
#include <KM_tai.h>
+#ifdef KM_WIN32
+#include <time.h>
+#else
#include <sys/time.h>
+#endif
//
void
caldate_frommjd(Kumu::TAI::caldate* cd, i32_t day)
{
+ assert(cd);
i32_t year, month, yday;
year = day / 146097L;
i32_t
caldate_mjd(const Kumu::TAI::caldate* cd)
{
+ assert(cd);
i32_t y, m, d;
d = cd->day - 678882L;
void
caltime_utc(Kumu::TAI::caltime* ct, const Kumu::TAI::tai* t)
{
+ assert(ct&&t);
Kumu::TAI::tai t2 = *t;
- ui64_t u;
- i32_t s;
-
- /* XXX: check for overfow? */
-
- u = t2.x;
-
- u += 58486;
- s = u % ui64_C(86400);
+ ui64_t u = t2.x + 58486;
+ i32_t s = (i32_t)(u % ui64_C(86400));
ct->second = (s % 60); s /= 60;
ct->minute = s % 60; s /= 60;
void
caltime_tai(const Kumu::TAI::caltime* ct, Kumu::TAI::tai* t)
{
+ assert(ct&&t);
i32_t day, s;
/* XXX: check for overflow? */
void
Kumu::TAI::tai::now()
{
+#ifdef KM_WIN32
+ SYSTEMTIME st;
+ ::GetSystemTime(&st);
+ TAI::caltime ct;
+ ct.date.year = st.wYear;
+ ct.date.month = st.wMonth;
+ ct.date.day = st.wDay;
+ ct.hour = st.wHour;
+ ct.minute = st.wMinute;
+ ct.second = st.wSecond;
+ ct.offset = 0;
+ caltime_tai(&ct, this);
+#else
struct timeval now;
gettimeofday(&now, 0);
x = ui64_C(4611686018427387914) + (ui64_t)now.tv_sec;
+#endif
}
+
//
const Kumu::TAI::tai&
Kumu::TAI::tai::operator=(const Kumu::TAI::caltime& rhs)
{
caltime_tai(&rhs, this);
+ return *this;
}
//
Kumu::TAI::caltime::operator=(const Kumu::TAI::tai& rhs)
{
caltime_utc(this, &rhs);
+ return *this;
}