1 /*
2 This file is part of CDO. CDO is a collection of Operators to manipulate and analyse Climate model Data.
3
4 Author: Uwe Schulzweida
5
6 */
7
8 #include <cdi.h>
9
10 #include "datetime.h"
11 #include "calendar.h"
12 #include "timebase.h"
13
14 JulianDate
juldate_encode(int calendar,int64_t date,int time)15 juldate_encode(int calendar, int64_t date, int time)
16 {
17 int year, month, day, hour, minute, second;
18 cdiDecodeDate(date, &year, &month, &day);
19 cdiDecodeTime(time, &hour, &minute, &second);
20
21 JulianDate juldate;
22 encode_caldaysec(calendar, year, month, day, hour, minute, second, &juldate.julday, &juldate.secofday);
23
24 return juldate;
25 }
26
27 void
juldate_decode(int calendar,const JulianDate & juldate,int64_t & date,int & time)28 juldate_decode(int calendar, const JulianDate &juldate, int64_t &date, int &time)
29 {
30 int year, month, day, hour, minute, second;
31 decode_caldaysec(calendar, juldate.julday, juldate.secofday, &year, &month, &day, &hour, &minute, &second);
32
33 date = cdiEncodeDate(year, month, day);
34 time = cdiEncodeTime(hour, minute, second);
35 }
36
37 JulianDate
juldate_sub(const JulianDate & juldate2,const JulianDate & juldate1)38 juldate_sub(const JulianDate &juldate2, const JulianDate &juldate1)
39 {
40 JulianDate juldate;
41
42 (void) julday_sub(juldate1.julday, juldate1.secofday, juldate2.julday, juldate2.secofday, &juldate.julday, &juldate.secofday);
43
44 return juldate;
45 }
46
47 JulianDate
juldate_add_seconds(int64_t seconds,const JulianDate & juldate)48 juldate_add_seconds(int64_t seconds, const JulianDate &juldate)
49 {
50 JulianDate juldate_new = juldate;
51
52 julday_add_seconds(seconds, &juldate_new.julday, &juldate_new.secofday);
53
54 return juldate_new;
55 }
56
57 double
juldate_to_seconds(const JulianDate & juldate)58 juldate_to_seconds(const JulianDate &juldate)
59 {
60 return juldate.julday * 86400. + juldate.secofday;
61 }
62