cTzOffset
Overview
bla bla bla
Types and Definitions
cTzOffset
struct cTzOffset
{
int32_t _v;
};
typedef struct cTzOffset cTzOffset;
A cTzOffset value represents the offset of a time zone.
Generated
cTzOffsetSlice
struct cTzOffsetSlice
{
int64_t s;
cTzOffset const* v;
};
typedef struct cTzOffsetSlice cTzOffsetSlice;
Via the macro SLICES_C_ generated struct.
cVarTzOffsetSlice
struct cVarTzOffsetSlice
{
int64_t s;
cTzOffset* v;
};
typedef struct cVarTzOffsetSlice cVarTzOffsetSlice;
Via the macro SLICES_C_ generated struct.
Functions
init
local_c
cTzOffset local_c( void );
Returns the offset of the current local time zone.
null_tz_offset_c
cTzOffset null_tz_offset_c( void );
Returns an invalid time zone offset.
tz_c
cTzOffset tz_c( int64_t v );
Initalise a cTzOffset value from one int value that contains the hour and minute value.
utc_c
cTzOffset utc_c( void );
Returns the offset of the UTC time zone.
from
duration_from_tz_offset_c
cDuration duration_from_tz_offset_c( cTzOffset tz );
Creates a cDuration value from a cTzOffset value.
hmsn_from_tz_offset_c
cHmsn hmsn_from_tz_offset_c( cTzOffset tz );
Creates a cHmsn value from a cTzOffset value.
tz_offset_from_duration_c
cTzOffset tz_offset_from_duration_c( cDuration dur );
Creates a cTzOffset value from a cDuration value.
tz_offset_from_hmsn_c
cTzOffset tz_offset_from_hmsn_c( cHmsn hmsn );
Creates a cTzOffset value from a cHmsn value.
cmp
cmp_tz_offset_c
int cmp_tz_offset_c( cTzOffset a, cTzOffset b );
Compares two time zone offsets and returns the three possible results:
- <0
-
if the a offset is lower as b
- 0
-
if both offsets are equal
- >0
-
if the a offset is higher as b
eq_tz_offset_c
bool eq_tz_offset_c( cTzOffset a, cTzOffset b );
Returns true if a is equal to b, otherwise false.
diff
between_tz_offsets_c
cDuration between_tz_offsets_c( cTzOffset a, cTzOffset b );
Returns the duration between time zone values.
#include "clingo/lang/expect.h"
#include "clingo/time/cTzOffset.h"
TEMP_SLICE_C_(
test,
{
cTzOffset a;
cTzOffset b;
cDuration exp;
}
)
#define t_( ... ) ((test){__VA_ARGS__})
int main( void )
{
init_tap_c_();
cTzOffset utc = utc_c();
cTzOffset almt = tz_c( +600 );
cTzOffset pst = tz_c( -800 );
testSlice tests = slice_c_( test,
t_( utc, almt, hours_c( 6 ) ),
t_( almt, utc, hours_c( -6 ) ),
t_( utc, pst, hours_c( -8 ) ),
t_( pst, utc, hours_c( 8 ) ),
t_( pst, almt, hours_c( 14 ) ),
t_( almt, pst, hours_c( -14 ) )
);
for_each_c_( test const*, t, tests )
{
cDuration dur = between_tz_offsets_c( t->a, t->b );
bool res = eq_c( cmp_duration_c( dur, t->exp ) );
cRecorder* rec = &recorder_c_( 256 );
write_duration_c_( rec, dur );
tap_descf_c( res, "test: %s", turn_into_cstr_c( rec ) );
}
return finish_tap_c_();
}
io
The functions read_tz_offset_c and write_tz_offset_c are using the following format:
o |
The offset in the +hh:mm format, where the mm part is optional |
+00, +10 or -04:30 |
oo |
The offset in the +hh:mm format |
+00:00, +10 or -04:30 |
oooo |
The offset in the +hhmm format |
+0000, +1000 or -0430 |
z |
Like "o", but the UTC offset will be replaced with a Z |
Z, +10 or -04:30 |
zz |
Like "oo", but the UTC offset will be replaced with a Z |
Z, +10:00 or -04:30 |
zzzz |
Like "oooo", but the UTC offset will be replaced with a Z |
Z, +1000 or -0430 |
read_tz_offset_c
#define read_tz_offset_c_( Sca, Tz ) \
read_tz_offset_c( (Sca), (Tz), "" )
bool read_tz_offset_c( cScanner sca[static 1],
cTzOffset tz[static 1],
char const fmt[static 1] );
Reads a cTzOffset value from a text with a scanner. The function will use "oo" as default format.
#include "clingo/lang/expect.h"
#include "clingo/time/cTzOffset.h"
TEMP_SLICE_C_(
test,
{
char const* str;
char const* fmt;
cTzOffset exp;
}
)
#define t_( ... ) ((test){__VA_ARGS__})
int main( void )
{
init_tap_c_();
testSlice tests = slice_c_( test,
t_( "+04:30", "o", tz_c( +430 ) ),
t_( "+04:30", "oo", tz_c( +430 ) ),
t_( "+0430", "oooo", tz_c( +430 ) ),
t_( "-07", "z", tz_c( -700 ) ),
t_( "-07:00", "zz", tz_c( -700 ) ),
t_( "-0700", "zzzz", tz_c( -700 ) ),
t_( "+00", "o", tz_c( 0 ) ),
t_( "Z", "z", tz_c( 0 ) )
);
for_each_c_( test const*, t, tests )
{
cScanner* sca = &cstr_scanner_c_( t->str );
cTzOffset tz;
bool res = read_tz_offset_c( sca, &tz, t->fmt );
res &= eq_c( cmp_tz_offset_c( tz, t->exp ) );
tap_descf_c( res, "test: %s with %s", t->str, t->fmt );
}
return finish_tap_c_();
}
write_tz_offset_c
#define write_tz_offset_c_( Rec, Tz ) \
write_tz_offset_c( (Rec), (Tz), "" )
bool write_tz_offset_c( cRecorder rec[static 1],
cTzOffset tz,
char const fmt[static 1] );
Writes a cTzOffset value into the recorder. The function will use "oo" as default format.
#include "clingo/lang/expect.h"
#include "clingo/time/cTzOffset.h"
TEMP_SLICE_C_(
test,
{
cTzOffset tz;
char const* fmt;
char const* exp;
}
)
#define t_( ... ) ((test){__VA_ARGS__})
int main( void )
{
init_tap_c_();
testSlice tests = slice_c_( test,
t_( tz_c( +430 ), "o", "+04:30" ),
t_( tz_c( +430 ), "oo", "+04:30" ),
t_( tz_c( +430 ), "oooo", "+0430" ),
t_( tz_c( -700 ), "z", "-07" ),
t_( tz_c( -700 ), "zz", "-07:00" ),
t_( tz_c( -700 ), "zzzz", "-0700" ),
t_( tz_c( 0 ), "o", "+00" ),
t_( tz_c( 0 ), "z", "Z" )
);
for_each_c_( test const*, t, tests )
{
cRecorder* rec = &recorder_c_( 32 );
bool res = write_tz_offset_c( rec, t->tz, t->fmt );
res &= recorded_is_c( rec, t->exp );
tap_descf_c( res, "'%s' -> '%s'", t->fmt, turn_into_cstr_c( rec ) );
}
return finish_tap_c_();
}