add a TimeZone::PrintOffset(...) method

This commit is contained in:
Tomasz Sowa 2023-08-29 15:02:37 +02:00
parent 6a9504fd5f
commit f7e077a7c5
Signed by: tomasz.sowa
GPG Key ID: 662CC1438638588B
2 changed files with 43 additions and 3 deletions

View File

@ -5,7 +5,7 @@
*/
/*
* Copyright (c) 2012-2021, Tomasz Sowa
* Copyright (c) 2012-2023, Tomasz Sowa
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@ -166,6 +166,45 @@ return local;
}
void TimeZone::PrintOffsetPart(long val, pt::Stream & str)
{
if( val < 10 )
{
str << '0';
}
str << val;
}
void TimeZone::PrintOffset(time_t offset, pt::Stream & str)
{
bool has_sign = false;
if( offset < 0 )
{
has_sign = true;
offset = 0 - offset;
}
time_t days = offset / 60 / 60 / 24;
if( days == 0 )
{
str << ((has_sign) ? '-' : '+');
time_t diff = offset - days * 60 * 60 * 24;
long hour = int(diff / 60 / 60);
long min = int((diff - hour * 60 * 60) / 60);
PrintOffsetPart(hour, str);
str << ':';
PrintOffsetPart(min, str);
}
}
time_t TimeZone::CalcUTCOffset(const pt::Date & local_date)
{
time_t dst_offset = 0;

View File

@ -5,7 +5,7 @@
*/
/*
* Copyright (c) 2012-2014, Tomasz Sowa
* Copyright (c) 2012-2023, Tomasz Sowa
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@ -115,7 +115,7 @@ public:
time_t CalcLocalOffset(const pt::Date & utc_date);
time_t ToLocal(time_t utc_time);
pt::Date ToLocal(const pt::Date & utc_date);
static void PrintOffset(time_t offset, pt::Stream & str); // prints the offset as [+|-]HH:MM:SS e.g.: +02:00:00
/*
converting from local time to UTC
@ -157,6 +157,7 @@ private:
time_t ParseStrOffset(const wchar_t * str);
time_t GetOffset(pt::Space & space);
bool SetTzDst(pt::Space & year);
static void PrintOffsetPart(long val, pt::Stream & str);
};