8#ifndef INCLUDED_BDLT_DATEFORMATTER
9#define INCLUDED_BDLT_DATEFORMATTER
64#include <bdlscm_version.h>
79#include <bsl_string_view.h>
84class DateFormatter_Cache;
93template <
class t_CHAR>
102 k_DAY_OF_MONTH_WIDTH = 2,
103 k_DAY_OF_YEAR_WIDTH = 3,
104 k_WEEKDAY_INDEX_WIDTH = 1,
105 k_WEEKDAY_NAME_WIDTH = 3,
106 k_MONTH_INDEX_WIDTH = 2,
107 k_MONTH_NAME_WIDTH = 3,
109 k_ABBREVIATED_YEAR_WIDTH = 2,
121 template <
class t_ITERATOR>
122 static t_ITERATOR formatDayOfMonth(t_ITERATOR out,
127 template <
class t_ITERATOR>
128 static t_ITERATOR formatDayOfWeek(t_ITERATOR out,
133 template <
class t_ITERATOR>
134 static t_ITERATOR formatMonthIndex(t_ITERATOR out,
139 template <
class t_ITERATOR>
140 static t_ITERATOR formatMonthOfYear(t_ITERATOR out,
145 template <
class t_ITERATOR>
146 static t_ITERATOR formatYear(t_ITERATOR out,
192 template <
class t_ITERATOR>
199 template <
class t_ITERATOR>
205 template <
class t_ITERATOR>
265template <
class t_CHAR>
266template <
class t_ITERATOR>
272 return Util::writeZeroPaddedDigits(out, value.
day(), k_DAY_OF_MONTH_WIDTH);
275template <
class t_CHAR>
276template <
class t_ITERATOR>
278t_ITERATOR DateFormatter<t_CHAR>::formatDayOfWeek(
280 const DateFormatter_Cache& value)
285 return FormatterCharUtil::outputFromChar(
286 dayOfWeekName.
data(),
287 dayOfWeekName.
data() + dayOfWeekName.
length(),
291template <
class t_CHAR>
292template <
class t_ITERATOR>
294t_ITERATOR DateFormatter<t_CHAR>::formatMonthIndex(
296 const DateFormatter_Cache& value)
298 return Util::writeZeroPaddedDigits(out,
300 k_MONTH_INDEX_WIDTH);
303template <
class t_CHAR>
304template <
class t_ITERATOR>
306t_ITERATOR DateFormatter<t_CHAR>::formatMonthOfYear(
308 const DateFormatter_Cache& value)
313 return FormatterCharUtil::outputFromChar(
319template <
class t_CHAR>
320template <
class t_ITERATOR>
322t_ITERATOR DateFormatter<t_CHAR>::formatYear(t_ITERATOR out,
323 const DateFormatter_Cache& value)
325 return Util::writeZeroPaddedDigits(out, value.year(), k_YEAR_WIDTH);
329template <
class t_CHAR>
336template <
class t_CHAR>
340 d_fixedWidth += k_YEAR_WIDTH + k_MONTH_NAME_WIDTH + k_DAY_OF_MONTH_WIDTH;
343template <
class t_CHAR>
347 d_fixedWidth += k_YEAR_WIDTH + k_DASH_WIDTH + k_MONTH_INDEX_WIDTH +
348 k_DASH_WIDTH + k_DAY_OF_MONTH_WIDTH;
351template <
class t_CHAR>
358template <
class t_CHAR>
365 switch (
static_cast<char>(specInOut->
front())) {
367 d_fixedWidth += k_CENTURY_WIDTH;
370 d_fixedWidth += k_ABBREVIATED_YEAR_WIDTH;
373 d_fixedWidth += k_YEAR_WIDTH;
376 d_fixedWidth += k_MONTH_INDEX_WIDTH;
380 d_fixedWidth += k_MONTH_NAME_WIDTH;
384 d_fixedWidth += k_DAY_OF_MONTH_WIDTH;
387 d_fixedWidth += k_WEEKDAY_NAME_WIDTH;
391 d_fixedWidth += k_WEEKDAY_INDEX_WIDTH;
394 d_fixedWidth += k_DAY_OF_YEAR_WIDTH;
413template <
class t_CHAR>
420template <
class t_CHAR>
426template <
class t_CHAR>
427template <
class t_ITERATOR>
435 switch (
static_cast<char>(specInOut->
front())) {
437 *outIt = Util::writeZeroPaddedDigits(*outIt,
442 *outIt = Util::writeZeroPaddedDigits(*outIt,
444 k_ABBREVIATED_YEAR_WIDTH);
447 *outIt = formatYear(*outIt, value);
450 *outIt = formatMonthIndex(*outIt, value);
454 *outIt = formatMonthOfYear(*outIt, value);
457 *outIt = formatDayOfMonth(*outIt, value);
460 unsigned dom = value.
day();
462 *(*outIt)++ = t_CHAR(
' ');
463 *(*outIt)++ = t_CHAR(
'0' + dom);
466 *outIt = Util::writeZeroPaddedDigits(*outIt,
468 k_DAY_OF_MONTH_WIDTH);
472 *outIt = formatDayOfWeek(*outIt, value);
481 dow = (dow + 7 - 2) % 7 + 1;
482 *(*outIt)++ = t_CHAR(
'0' + dow);
490 *(*outIt)++ = t_CHAR(
'0' + dow);
493 *outIt = Util::writeZeroPaddedDigits(*outIt,
495 k_DAY_OF_YEAR_WIDTH);
498 *outIt = formatDefault(*outIt, value);
502 *outIt = formatIso8601(*outIt, value);
514template <
class t_CHAR>
515template <
class t_ITERATOR>
521 out = formatDayOfMonth(out, value);
522 out = formatMonthOfYear(out, value);
523 out = formatYear(out, value);
527template <
class t_CHAR>
528template <
class t_ITERATOR>
534 out = formatYear(out, value);
535 *out++ = t_CHAR(
'-');
536 out = formatMonthIndex(out, value);
537 *out++ = t_CHAR(
'-');
538 out = formatDayOfMonth(out, value);
542template <
class t_CHAR>
599template <
class t_CHAR>
602 typedef BloombergLP::bdlt::Date Date;
603 typedef BloombergLP::bdlt::DateFormatter_Cache FormatCache;
604 typedef BloombergLP::bdlt::Formatter<
605 BloombergLP::bdlt::DateFormatter, t_CHAR> Formatter;
607 Formatter d_formatter;
613 template <
class t_PARSE_CONTEXT>
615 t_PARSE_CONTEXT& context)
617 return d_formatter.parse(context);
625 template <
class t_FORMAT_CONTEXT>
626 typename t_FORMAT_CONTEXT::iterator
format(
628 t_FORMAT_CONTEXT& formatContext)
const
630 return d_formatter.format(FormatCache(value), formatContext);
Definition bdlt_date.h:294
void getYearMonthDay(int *year, int *month, int *day) const
Definition bdlt_date.h:983
int dayOfYear() const
Return the day of the year in the range [1 .. 366] of this date.
Definition bdlt_date.h:968
DayOfWeek::Enum dayOfWeek() const
Definition bdlt_date.h:961
BSLS_KEYWORD_CONSTEXPR size_type length() const BSLS_KEYWORD_NOEXCEPT
Return the length of this view.
Definition bslstl_stringview.h:1913
BSLS_KEYWORD_CONSTEXPR const_pointer data() const BSLS_KEYWORD_NOEXCEPT
Definition bslstl_stringview.h:1988
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 BSLA_FALLTHROUGH
Definition bsla_fallthrough.h:188
#define BSLS_ASSERT(X)
Definition bsls_assert.h:1976
#define BSLS_ASSERT_SAFE(X)
Definition bsls_assert.h:1917
#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 bdlat_valuetypefunctions.h:939
Enum
Enumerated day-of-week values.
Definition bdlt_dayofweek.h:125
static const char * toAscii(Enum dayOfWeek)
static const char * toAscii(MonthOfYear::Enum value)
Enum
Define the list of month-of-year values.
Definition bdlt_monthofyear.h:138