# [−][src]Module chrono::format::strftime

`strftime`

/`strptime`

-inspired date and time formatting syntax.

## Specifiers

The following specifiers are available both to formatting and parsing.

Spec. | Example | Description |
---|---|---|

DATE SPECIFIERS: | ||

`%Y` | `2001` | The full proleptic Gregorian year, zero-padded to 4 digits. ^{1} |

`%C` | `20` | The proleptic Gregorian year divided by 100, zero-padded to 2 digits. ^{2} |

`%y` | `01` | The proleptic Gregorian year modulo 100, zero-padded to 2 digits. ^{2} |

`%m` | `07` | Month number (01--12), zero-padded to 2 digits. |

`%b` | `Jul` | Abbreviated month name. Always 3 letters. |

`%B` | `July` | Full month name. Also accepts corresponding abbreviation in parsing. |

`%h` | `Jul` | Same as `%b` . |

`%d` | `08` | Day number (01--31), zero-padded to 2 digits. |

`%e` | ` 8` | Same as `%d` but space-padded. Same as `%_d` . |

`%a` | `Sun` | Abbreviated weekday name. Always 3 letters. |

`%A` | `Sunday` | Full weekday name. Also accepts corresponding abbreviation in parsing. |

`%w` | `0` | Sunday = 0, Monday = 1, ..., Saturday = 6. |

`%u` | `7` | Monday = 1, Tuesday = 2, ..., Sunday = 7. (ISO 8601) |

`%U` | `28` | Week number starting with Sunday (00--53), zero-padded to 2 digits. ^{3} |

`%W` | `27` | Same as `%U` , but week 1 starts with the first Monday in that year instead. |

`%G` | `2001` | Same as `%Y` but uses the year number in ISO 8601 week date. ^{4} |

`%g` | `01` | Same as `%y` but uses the year number in ISO 8601 week date. ^{4} |

`%V` | `27` | Same as `%U` but uses the week number in ISO 8601 week date (01--53). ^{4} |

`%j` | `189` | Day of the year (001--366), zero-padded to 3 digits. |

`%D` | `07/08/01` | Month-day-year format. Same as `%m/%d/%y` . |

`%x` | `07/08/01` | Same as `%D` . |

`%F` | `2001-07-08` | Year-month-day format (ISO 8601). Same as `%Y-%m-%d` . |

`%v` | ` 8-Jul-2001` | Day-month-year format. Same as `%e-%b-%Y` . |

TIME SPECIFIERS: | ||

`%H` | `00` | Hour number (00--23), zero-padded to 2 digits. |

`%k` | ` 0` | Same as `%H` but space-padded. Same as `%_H` . |

`%I` | `12` | Hour number in 12-hour clocks (01--12), zero-padded to 2 digits. |

`%l` | `12` | Same as `%I` but space-padded. Same as `%_I` . |

`%P` | `am` | `am` or `pm` in 12-hour clocks. |

`%p` | `AM` | `AM` or `PM` in 12-hour clocks. |

`%M` | `34` | Minute number (00--59), zero-padded to 2 digits. |

`%S` | `60` | Second number (00--60), zero-padded to 2 digits. ^{5} |

`%f` | `026490000` | The fractional seconds (in nanoseconds) since last whole second. ^{6} |

`%.f` | `.026490` | Similar to `.%f` but left-aligned. These all consume the leading dot. ^{6} |

`%.3f` | `.026` | Similar to `.%f` but left-aligned but fixed to a length of 3. ^{6} |

`%.6f` | `.026490` | Similar to `.%f` but left-aligned but fixed to a length of 6. ^{6} |

`%.9f` | `.026490000` | Similar to `.%f` but left-aligned but fixed to a length of 9. ^{6} |

`%3f` | `026` | Similar to `%.3f` but without the leading dot. ^{6} |

`%6f` | `026490` | Similar to `%.6f` but without the leading dot. ^{6} |

`%9f` | `026490000` | Similar to `%.9f` but without the leading dot. ^{6} |

`%R` | `00:34` | Hour-minute format. Same as `%H:%M` . |

`%T` | `00:34:60` | Hour-minute-second format. Same as `%H:%M:%S` . |

`%X` | `00:34:60` | Same as `%T` . |

`%r` | `12:34:60 AM` | Hour-minute-second format in 12-hour clocks. Same as `%I:%M:%S %p` . |

TIME ZONE SPECIFIERS: | ||

`%Z` | `ACST` | Formatting only: Local time zone name. |

`%z` | `+0930` | Offset from the local time to UTC (with UTC being `+0000` ). |

`%:z` | `+09:30` | Same as `%z` but with a colon. |

`%#z` | `+09` | Parsing only: Same as `%z` but allows minutes to be missing or present. |

DATE & TIME SPECIFIERS: | ||

`%c` | `Sun Jul 8 00:34:60 2001` | `ctime` date & time format. Same as `%a %b %e %T %Y` sans `\n` . |

`%+` | `2001-07-08T00:34:60.026490+09:30` | ISO 8601 / RFC 3339 date & time format. ^{7} |

`%s` | `994518299` | UNIX timestamp, the number of seconds since 1970-01-01 00:00 UTC. ^{8} |

SPECIAL SPECIFIERS: | ||

`%t` | Literal tab (`\t` ). | |

`%n` | Literal newline (`\n` ). | |

`%%` | Literal percent sign. |

It is possible to override the default padding behavior of numeric specifiers `%?`

.
This is not allowed for other specifiers and will result in the `BAD_FORMAT`

error.

Modifier | Description |
---|---|

`%-?` | Suppresses any padding including spaces and zeroes. (e.g. `%j` = `012` , `%-j` = `12` ) |

`%_?` | Uses spaces as a padding. (e.g. `%j` = `012` , `%_j` = ` 12` ) |

`%0?` | Uses zeroes as a padding. (e.g. `%e` = ` 9` , `%0e` = `09` ) |

Notes:

`%Y`

: Negative years are allowed in formatting but not in parsing. ↩`%C`

,`%y`

: This is floor division, so 100 BCE (year number -99) will print`-1`

and`99`

respectively. ↩`%U`

: Week 1 starts with the first Sunday in that year. It is possible to have week 0 for days before the first Sunday. ↩`%G`

,`%g`

,`%V`

: Week 1 is the first week with at least 4 days in that year. Week 0 does not exist, so this should be used with`%G`

or`%g`

. ↩`%S`

: It accounts for leap seconds, so`60`

is possible. ↩`%f`

,`%.f`

,`%.3f`

,`%.6f`

,`%.9f`

,`%3f`

,`%6f`

,`%9f`

:

The default`%f`

is right-aligned and always zero-padded to 9 digits for the compatibility with glibc and others, so it always counts the number of nanoseconds since the last whole second. E.g. 7ms after the last second will print`007000000`

, and parsing`7000000`

will yield the same.

The variant`%.f`

is left-aligned and print 0, 3, 6 or 9 fractional digits according to the precision. E.g. 70ms after the last second under`%.f`

will print`.070`

(note: not`.07`

), and parsing`.07`

,`.070000`

etc. will yield the same. Note that they can print or read nothing if the fractional part is zero or the next character is not`.`

.

The variant`%.3f`

,`%.6f`

and`%.9f`

are left-aligned and print 3, 6 or 9 fractional digits according to the number preceding`f`

. E.g. 70ms after the last second under`%.3f`

will print`.070`

(note: not`.07`

), and parsing`.07`

,`.070000`

etc. will yield the same. Note that they can read nothing if the fractional part is zero or the next character is not`.`

however will print with the specified length.

The variant`%3f`

,`%6f`

and`%9f`

are left-aligned and print 3, 6 or 9 fractional digits according to the number preceding`f`

, but without the leading dot. E.g. 70ms after the last second under`%3f`

will print`070`

(note: not`07`

), and parsing`07`

,`070000`

etc. will yield the same. Note that they can read nothing if the fractional part is zero. ↩`%+`

: Same as`%Y-%m-%dT%H:%M:%S%.f%:z`

, i.e. 0, 3, 6 or 9 fractional digits for seconds and colons in the time zone offset.

The typical`strftime`

implementations have different (and locale-dependent) formats for this specifier. While Chrono's format for`%+`

is far more stable, it is best to avoid this specifier if you want to control the exact output. ↩`%s`

: This is not padded and can be negative. For the purpose of Chrono, it only accounts for non-leap seconds so it slightly differs from ISO C`strftime`

behavior. ↩

## Structs

StrftimeItems | Parsing iterator for |