mtime 1.3.0
Loading...
Searching...
No Matches
mtime_timedelta.h
Go to the documentation of this file.
1// Copyright (c) 2013-2024 MPI-M, Luis Kornblueh, Rahul Sinha and DWD, Florian Prill. All rights reserved.
2//
3// SPDX-License-Identifier: BSD-3-Clause
4//
20#ifndef _MTIME_TIMEDELTA_H
21#define _MTIME_TIMEDELTA_H
22
23#include <stdint.h>
24#include <stdbool.h>
25
26#include "mtime_calendar.h"
27
28struct _datetime;
29struct _date;
30struct _julianday;
31struct _juliandelta;
32
40{
42 char sign;
43
44 int64_t year;
45 int month;
46 int day;
47 int hour;
48 int minute;
49 int second;
50 int ms;
51};
52
64
65struct _timedelta *newTimeDelta(const char *timedelta_string);
66
67struct _timedelta *newRawTimeDelta(char _sign, int64_t _year, int _month, int _day, int _hour, int _minute, int _second, int _ms);
68
70
71void deallocateTimeDelta(struct _timedelta *td);
72
73compare_return_val compareTimeDelta(struct _timedelta *td1, struct _timedelta *td2);
74
75struct _timedelta *replaceTimeDelta(struct _timedelta *tdsrc, struct _timedelta *tddest);
76
77struct _juliandelta *timeDeltaToJulianDelta(struct _timedelta *td, struct _datetime *dt, struct _juliandelta *jd);
78
79struct _timedelta *julianDeltaToTimeDelta(struct _juliandelta *jd, struct _datetime *dt, struct _timedelta *td_return);
80
81struct _divisionquotienttimespan *divideTimeDeltaInSeconds(struct _timedelta *dividend, struct _timedelta *divisor,
82 struct _divisionquotienttimespan *quo_ret);
83
84struct _divisionquotienttimespan *divideTwoDatetimeDiffsInSeconds(struct _datetime *dt1_dividend, struct _datetime *dt2_dividend,
85 struct _datetime *dt1_divisor, struct _datetime *dt2_divisor,
86 int64_t *denominator_ret,
87 struct _divisionquotienttimespan *quo_ret);
88
90 struct _timedelta *divisor,
91 struct _divisionquotienttimespan *quo_ret);
92
93struct _timedelta *getTimeDeltaFromDate(struct _date *, struct _date *, struct _timedelta *);
94
95struct _timedelta *getTimeDeltaFromDateTime(struct _datetime *dt1, struct _datetime *dt2, struct _timedelta *td_return);
96
97int64_t getTotalMilliSecondsTimeDelta(struct _timedelta *td, struct _datetime *dt);
98
99int64_t getTotalSecondsTimeDelta(struct _timedelta *td, struct _datetime *dt);
100
101char *timedeltaToString(struct _timedelta *td, char *toString);
102
103struct _date *addTimeDeltaToDate(struct _date *dt, struct _timedelta *td, struct _date *dt_return);
104
105struct _datetime *addTimeDeltaToDateTime(struct _datetime *dt, struct _timedelta *td, struct _datetime *dt_return);
106
107struct _timedelta *moduloTimeDeltaFromDateTime(struct _datetime *start_dt, struct _timedelta *timestep,
108 struct _datetime *current_dt, struct _timedelta *modulo_td);
109
110struct _timedelta *elementwiseScalarMultiplyTimeDelta(struct _timedelta *base_td, int64_t lambda, struct _timedelta *scaled_td);
111
112struct _timedelta *elementwiseAddTimeDeltatoTimeDelta(struct _timedelta *td1, struct _timedelta *td2, struct _timedelta *td_return);
113
114int64_t moduloTimedelta(struct _timedelta *a, struct _timedelta *p, int64_t *quot);
115
116char *getPTStringFromMS(int64_t _ms, char *PTstr);
117
118char *getPTStringFromSeconds(int64_t _s, char *PTstr);
119
120char *getPTStringFromSecondsFloat(float _s, char *PTstr);
121
122char *getPTStringFromSecondsDouble(double _s, char *PTstr);
123
124char *getPTStringFromMinutes(int64_t _m, char *PTstr);
125
126char *getPTStringFromHours(int64_t _h, char *PTstr);
127
131#endif
int64_t quotient
Quotient of two timedeltas.
Definition mtime_timedelta.h:61
int ms
Milli-Second part of timedelta.
Definition mtime_timedelta.h:50
int64_t remainder_in_ms
Remainder in milli seconds of two timedeltas division.
Definition mtime_timedelta.h:62
char sign
sign of time delta. Sign can be '+' or '-'.
Definition mtime_timedelta.h:42
int64_t year
Year part of timedelta.
Definition mtime_timedelta.h:44
int flag_std_form
Is timedelta formatted in standard form (eg. PT30M10S) or long form (eg. PT3000S)?
Definition mtime_timedelta.h:41
int day
Day part of timedelta.
Definition mtime_timedelta.h:46
int month
Month part of timedelta.
Definition mtime_timedelta.h:45
int hour
Hour part of timedelta.
Definition mtime_timedelta.h:47
int second
Second part of timedelta.
Definition mtime_timedelta.h:49
int minute
Minute part of timedelta.
Definition mtime_timedelta.h:48
struct _timedelta * moduloTimeDeltaFromDateTime(struct _datetime *start_dt, struct _timedelta *timestep, struct _datetime *current_dt, struct _timedelta *modulo_td)
Get the timedelta between current_dt and start_dt plus next integral-multiple-of-timestep (timedelta)...
Definition mtime_timedelta.c:1552
char * getPTStringFromHours(int64_t _h, char *PTstr)
Return a PT String corresponding to arbitrary number of Hours.
Definition mtime_timedelta.c:1993
struct _timedelta * elementwiseAddTimeDeltatoTimeDelta(struct _timedelta *td1, struct _timedelta *td2, struct _timedelta *td_return)
Return the element-wise sum of two timedeltas.
Definition mtime_timedelta.c:1737
struct _timedelta * newTimeDelta(const char *timedelta_string)
Construct new TimeDelta using an ISO 8601 conforming string.
Definition mtime_timedelta.c:43
struct _divisionquotienttimespan * divideTwoDatetimeDiffsInSeconds(struct _datetime *dt1_dividend, struct _datetime *dt2_dividend, struct _datetime *dt1_divisor, struct _datetime *dt2_divisor, int64_t *denominator_ret, struct _divisionquotienttimespan *quo_ret)
division of two differences in datetimes.
Definition mtime_timedelta.c:1142
struct _timedelta * getTimeDeltaFromDateTime(struct _datetime *dt1, struct _datetime *dt2, struct _timedelta *td_return)
Get the TimeDelta between two DateTimes dt1 and dt2 as (dt1-dt2).
Definition mtime_timedelta.c:1257
struct _datetime * addTimeDeltaToDateTime(struct _datetime *dt, struct _timedelta *td, struct _datetime *dt_return)
Add timedelta to DateTime.
Definition mtime_timedelta.c:1488
int64_t getTotalSecondsTimeDelta(struct _timedelta *td, struct _datetime *dt)
Get total number of seconds in timedelta.
Definition mtime_timedelta.c:1336
struct _timedelta * replaceTimeDelta(struct _timedelta *tdsrc, struct _timedelta *tddest)
COPY a TimeDelta object.
Definition mtime_timedelta.c:435
struct _timedelta * elementwiseScalarMultiplyTimeDelta(struct _timedelta *base_td, int64_t lambda, struct _timedelta *scaled_td)
Return the element-wise product of a scalar and a timedelta.
Definition mtime_timedelta.c:1603
void deallocateTimeDelta(struct _timedelta *td)
Destructor of TimeDelta.
Definition mtime_timedelta.c:186
struct _timedelta * getTimeDeltaFromDate(struct _date *, struct _date *, struct _timedelta *)
Get the TimeDelta between two Dates d1 and d2 as (d1-d2).
Definition mtime_timedelta.c:1208
compare_return_val compareTimeDelta(struct _timedelta *td1, struct _timedelta *td2)
Compare two timedelta and return (td1 > td2) OR (td1 = td2) OR (td1 < td2).
Definition mtime_timedelta.c:210
struct _date * addTimeDeltaToDate(struct _date *dt, struct _timedelta *td, struct _date *dt_return)
Add timedelta to Date.
Definition mtime_timedelta.c:1436
char * getPTStringFromSecondsFloat(float _s, char *PTstr)
Return a PT String corresponding to arbitrary number of seconds.
Definition mtime_timedelta.c:1927
struct _timedelta * constructAndCopyTimeDelta(struct _timedelta *td)
Copy the values and construct a new TimeDelta.
Definition mtime_timedelta.c:152
char * getPTStringFromMS(int64_t _ms, char *PTstr)
Return a PT String corresponding to arbitrary number of milliseconds.
Definition mtime_timedelta.c:1860
int64_t moduloTimedelta(struct _timedelta *a, struct _timedelta *p, int64_t *quot)
Returns the remainder of timedelta a modulo timedelta p.
Definition mtime_timedelta.c:1823
char * getPTStringFromSeconds(int64_t _s, char *PTstr)
Return a PT String corresponding to arbitrary number of seconds.
Definition mtime_timedelta.c:1904
int64_t getTotalMilliSecondsTimeDelta(struct _timedelta *td, struct _datetime *dt)
Get total number of milliseconds in timedelta.
Definition mtime_timedelta.c:1305
struct _divisionquotienttimespan * divideDatetimeDifferenceInSeconds(struct _datetime *dt1, struct _datetime *dt2, struct _timedelta *divisor, struct _divisionquotienttimespan *quo_ret)
division by an interval given in of seconds.
Definition mtime_timedelta.c:1095
char * getPTStringFromSecondsDouble(double _s, char *PTstr)
Return a PT String corresponding to arbitrary number of seconds.
Definition mtime_timedelta.c:1949
char * timedeltaToString(struct _timedelta *td, char *toString)
Get TimeDelta as an extended string.
Definition mtime_timedelta.c:1360
struct _timedelta * newRawTimeDelta(char _sign, int64_t _year, int _month, int _day, int _hour, int _minute, int _second, int _ms)
Construct new TimeDelta using 'raw' numerical values.
Definition mtime_timedelta.c:112
char * getPTStringFromMinutes(int64_t _m, char *PTstr)
Return a PT String corresponding to arbitrary number of minutes.
Definition mtime_timedelta.c:1971
struct _date containing usual date parameters.
Definition mtime_date.h:32
struct _datetime contains a struct _date and a struct _time element.
Definition mtime_datetime.h:36
Struct _divisionquotienttimespan is used for storing division of two time-delta results.
Definition mtime_timedelta.h:60
Struct _julianday containing julian day parameters.
Definition mtime_julianDay.h:32
Struct _timedelta containing timedelta and sign of year parameter.
Definition mtime_timedelta.h:40
Singleton Calendar connecting all supported calendar types.