8#ifndef INCLUDED_BDLT_TIMEZONEFORMATTER
9#define INCLUDED_BDLT_TIMEZONEFORMATTER
66#include <bdlscm_version.h>
88template <
class t_CHAR>
91 enum { k_OFFSET_LIMIT = 24 * 60,
92 k_INITIAL_OFFSET = 2 * k_OFFSET_LIMIT };
98 int d_numDefaultTimeZones;
99 int d_numIso8601TimeZones;
112 template <
class t_ITERATOR>
113 t_ITERATOR formatImp(t_ITERATOR out,
int offset,
bool isIso8601)
const;
117 bool isTimeZoneZ(
int offset)
const;
161 template <
class t_ITERATOR>
166 template <
class t_ITERATOR>
174 template <
class t_ITERATOR>
190template <
class t_CHAR>
191template <
class t_ITERATOR>
194 t_ITERATOR out,
int offset,
bool isIso8601)
const
196 if (isTimeZoneZ(offset)) {
197 *out++ = t_CHAR(
'Z');
202 *out++ = offset < 0 ? t_CHAR(
'-') : t_CHAR(
'+');
204 const int absOffset = bsl::abs(offset);
208 const int hours = absOffset / 60;
209 const int minutes = absOffset % 60;
211 out = Util::writeZeroPaddedDigits(out, hours, 2);
212 if (d_colon || (isIso8601 && !d_noColon)) {
213 *out++ = t_CHAR(
':');
215 return Util::writeZeroPaddedDigits(out, minutes, 2);
218template <
class t_CHAR>
219bool TimeZoneFormatter<t_CHAR>::isTimeZoneZ(
int offset)
const
221 return d_tzZ && 0 == offset;
225template <
class t_CHAR>
228: d_numDefaultTimeZones(0)
229, d_numIso8601TimeZones(0)
236template <
class t_CHAR>
240 ++d_numDefaultTimeZones;
243template <
class t_CHAR>
247 ++d_numIso8601TimeZones;
250template <
class t_CHAR>
256 switch (specInOut->
front()) {
271 if (d_colon && d_noColon) {
273 "Illegal: both ':' and '_' modifiers specified"));
281template <
class t_CHAR>
287 if (t_CHAR(
'z') == specInOut->
front()) {
288 ++d_numDefaultTimeZones;
297template <
class t_CHAR>
304template <
class t_CHAR>
311template <
class t_CHAR>
312template <
class t_ITERATOR>
315 t_ITERATOR out,
int offset)
const
317 return formatImp(out, offset,
false);
320template <
class t_CHAR>
321template <
class t_ITERATOR>
324 t_ITERATOR out,
int offset)
const
326 return formatImp(out, offset,
true);
329template <
class t_CHAR>
330template <
class t_ITERATOR>
338 if (t_CHAR(
'z') == specInOut->
front()) {
339 *outIt = formatDefault(*outIt, offset);
348template <
class t_CHAR>
352 enum { k_Z_TZ_WIDTH = 1,
353 k_COLON_TZ_WIDTH = 6,
354 k_NO_COLON_TZ_WIDTH = 5 };
356 int totalNumTimeZones = d_numDefaultTimeZones + d_numIso8601TimeZones;
358 return isTimeZoneZ(offset) ? k_Z_TZ_WIDTH * totalNumTimeZones
359 : d_colon ? k_COLON_TZ_WIDTH * totalNumTimeZones
360 : d_noColon ? k_NO_COLON_TZ_WIDTH * totalNumTimeZones
362 : k_NO_COLON_TZ_WIDTH * d_numDefaultTimeZones +
363 k_COLON_TZ_WIDTH * d_numIso8601TimeZones;
BSLS_KEYWORD_CONSTEXPR_CPP14 const_reference front() const
Definition bslstl_stringview.h:1966
BSLS_KEYWORD_CONSTEXPR_CPP14 void remove_prefix(size_type numChars)
Definition bslstl_stringview.h:1800
BSLS_KEYWORD_CONSTEXPR bool empty() const BSLS_KEYWORD_NOEXCEPT
Return true if this view has length 0, and false otherwise.
Definition bslstl_stringview.h:1931
#define BSLMF_ASSERT(expr)
Definition bslmf_assert.h:231
#define BSLS_ASSERT(X)
Definition bsls_assert.h:1976
#define BSLS_ASSERT_SAFE(X)
Definition bsls_assert.h:1917
#define BSLS_THROW(X)
Definition bsls_exceptionutil.h:374
#define BSLS_IDENT(str)
BSLS_IDENT() - insert string into .comment binary segment (if supported)
Definition bsls_ident.h:238
#define BSLS_KEYWORD_CONSTEXPR_CPP20
Definition bsls_keyword.h:645
Definition bbldc_basicisma30360.h:112
Definition bslmf_issame.h:146