15 const std::string iso8601 =
"2024-11-25T14:30:00-05:30";
18 if (parse_iso8601(iso8601, iso_dt, iso_tz)) {
19 std::cout <<
"ISO fields: "
20 << iso_dt.year <<
'-' << iso_dt.mon <<
'-' << iso_dt.day <<
' '
21 << iso_dt.hour <<
':' << iso_dt.min <<
':' << iso_dt.sec <<
' '
22 << to_string(iso_tz) <<
'\n';
27 if (str_to_ts(iso8601, utc_ts)) {
28 std::cout <<
"UTC seconds: " << utc_ts <<
'\n';
33 if (str_to_ts_ms(
"2024-11-25T20:00:00.250", utc_ms)) {
34 std::cout <<
"UTC milliseconds: " << utc_ms <<
'\n';
39 if (str_to_fts(
"2024-11-25T20:00:00.250Z", utc_fts)) {
40 std::cout <<
"UTC floating seconds: " << utc_fts <<
'\n';
44 const tz_t utc_offset = -(5 * SEC_PER_HOUR + 30 * SEC_PER_MIN);
45 const std::string custom = to_string(
"%Y-%m-%d %H:%M:%S %z", utc_ts, utc_offset);
46 std::cout <<
"Custom formatted: " << custom <<
'\n';
49 if (try_parse_format_ts(custom,
"%Y-%m-%d %H:%M:%S %z", reparsed_ts)) {
50 std::cout <<
"Reparsed seconds: " << reparsed_ts <<
'\n';
53 const std::string custom_ms = to_string_ms(
"%Y-%m-%d %H:%M:%S.%sss %z", utc_ms, utc_offset);
54 std::cout <<
"Custom formatted with ms: " << custom_ms <<
'\n';
57 if (try_parse_format_ts_ms(custom_ms,
"%Y-%m-%d %H:%M:%S.%sss %z", reparsed_ms)) {
58 std::cout <<
"Parsed custom milliseconds: " << reparsed_ms <<
'\n';
63 if (parse_iso_week_date(
"2025-W512", iso_week)) {
64 std::cout <<
"ISO week mixed form: "
65 << iso_week.year <<
"-W" << iso_week.week <<
'-' << iso_week.weekday <<
'\n';
69 if (DateTime::try_parse_iso_week_date(
"2025w51", iso_week)) {
70 std::cout <<
"ISO week lowercase/default weekday: "
71 << iso_week.year <<
"-W" << iso_week.week <<
'-' << iso_week.weekday <<
'\n';
75 const ts_t iso_week_ts = to_timestamp(2025, 12, 16);
76 const std::string iso_week_custom = to_string(
"%G-%V-%u", iso_week_ts);
77 std::cout <<
"ISO week custom formatted: " << iso_week_custom <<
'\n';
81 if (try_parse_format(iso_week_custom,
"%G-%V-%u", iso_week_dt, iso_week_tz)) {
82 std::cout <<
"ISO week reparsed calendar date: "
83 << iso_week_dt.year <<
'-' << iso_week_dt.mon <<
'-' << iso_week_dt.day <<
'\n';
86 if (try_parse_format(
"2025-W51",
"%G-W%V", iso_week_dt, iso_week_tz)) {
87 std::cout <<
"ISO week without weekday resolves to: "
88 << iso_week_dt.year <<
'-' << iso_week_dt.mon <<
'-' << iso_week_dt.day <<
'\n';
92 const bool mismatch = try_parse_format_ts(
"2024/11/25",
"%Y-%m-%d", reparsed_ts);
93 std::cout <<
"Format mismatch: " << (mismatch ?
"unexpected success" :
"false") <<
'\n';
96 const bool conflicting_tokens = try_parse_format(
97 "2025-12-16 2025-51-2",
101 std::cout <<
"Mixed Gregorian/ISO-week tokens: "
102 << (conflicting_tokens ?
"unexpected success" :
"false") <<
'\n';