Mstdlib-1.24.0
Parsing

Functions

M_time_t M_time_from_str (const char *timestr, const M_time_tz_t *tz, M_bool default_end_of_day)
 
char * M_time_to_str (const char *fmt, const M_time_localtm_t *tm)
 
char * M_time_parsefmt (const char *s, const char *fmt, M_time_localtm_t *tm)
 

Detailed Description

Function Documentation

◆ M_time_from_str()

M_time_t M_time_from_str ( const char *  timestr,
const M_time_tz_t tz,
M_bool  default_end_of_day 
)

Parse a time string.

Supports offsets and fixed formats.

Offsets:

  • Support:
    • 'now'
    • 'epoch'
    • 'yesterday' (at same time as current day)
    • 'today' (same as 'now'),
    • 'tomorrow' (at same time as current day),
    • 'BOD' (beginning of current day)
    • 'EOD' (end of current day)
    • +/-N magnitude', where magnitude is:
      • year, month, day, hour, min, sec
      • where long names and plural are supported

Ex: +6 Months or -7 hours

Offsets use the current time.

Fixed:

  • %m/%d/%Y %H
  • %m/%d/%Y %H %P
  • %m/%d/%Y %H %p
  • %m/%d/%Y %I %P
  • %m/%d/%Y %I %p
  • %m/%d/%Y %H%M
  • %m/%d/%Y %H%M %P
  • %m/%d/%Y %H%M %p
  • %m/%d/%Y %I%M %P
  • %m/%d/%Y %I%M %p
  • %m/%d/%Y %H%M%S
  • %m/%d/%Y %H%M%S %P
  • %m/%d/%Y %H%M%S %p
  • %m/%d/%Y %H%M%S %z
  • %m/%d/%Y %I%M%S %P
  • %m/%d/%Y %I%M%S %p
  • %m/%d/%Y %H%M%S %z
  • %m/%d/%Y %H:%M
  • %m/%d/%Y %H:%M %P
  • %m/%d/%Y %H:%M %p
  • %m/%d/%Y %I:%M %P
  • %m/%d/%Y %I:%M %p
  • %m/%d/%Y %H:%M:%S
  • %m/%d/%Y %H:%M:%S %P
  • %m/%d/%Y %H:%M:%S %p
  • %m/%d/%Y %I:%M:%S %P
  • %m/%d/%Y %I:%M:%S %p
  • %m/%d/%Y %H:%M:%S %z
  • %m/%d/%Y %H-%M
  • %m/%d/%Y %H-%M %P
  • %m/%d/%Y %H-%M %p
  • %m/%d/%Y %I-%M %P
  • %m/%d/%Y %I-%M %p
  • %m/%d/%Y %H-%M-%S
  • %m/%d/%Y %H-%M-%S %P
  • %m/%d/%Y %H-%M-%S %p
  • %m/%d/%Y %I-%M-%S %P
  • %m/%d/%Y %I-%M-%S %p
  • %m/%d/%Y %H-%M-%S %z
  • %m/%d/%Y T %H
  • %m/%d/%Y T %H %P
  • %m/%d/%Y T %H %p
  • %m/%d/%Y T %I %P
  • %m/%d/%Y T %I %p
  • %m/%d/%Y T %H%M
  • %m/%d/%Y T %H%M %P
  • %m/%d/%Y T %H%M %p
  • %m/%d/%Y T %I%M %P
  • %m/%d/%Y T %I%M %p
  • %m/%d/%Y T %H%M%S
  • %m/%d/%Y T %H%M%S %P
  • %m/%d/%Y T %H%M%S %p
  • %m/%d/%Y T %I%M%S %P
  • %m/%d/%Y T %I%M%S %p
  • %m/%d/%Y T %H%M%S %z
  • %m/%d/%Y T %H:%M
  • %m/%d/%Y T %H:%M %P
  • %m/%d/%Y T %H:%M %p
  • %m/%d/%Y T %I:%M %P
  • %m/%d/%Y T %I:%M %p
  • %m/%d/%Y T %H:%M:%S
  • %m/%d/%Y T %H:%M:%S %P
  • %m/%d/%Y T %H:%M:%S %p
  • %m/%d/%Y T %I:%M:%S %P
  • %m/%d/%Y T %I:%M:%S %p
  • %m/%d/%Y T %H:%M:%S %z
  • %m/%d/%Y T %H-%M
  • %m/%d/%Y T %H-%M %P
  • %m/%d/%Y T %H-%M %p
  • %m/%d/%Y T %I-%M %P
  • %m/%d/%Y T %I-%M %p
  • %m/%d/%Y T %H-%M-%S
  • %m/%d/%Y T %H-%M-%S %P
  • %m/%d/%Y T %H-%M-%S %p
  • %m/%d/%Y T %I-%M-%S %P
  • %m/%d/%Y T %I-%M-%S %p
  • %m/%d/%Y T %H-%M-%S %z
  • %m-%d-%Y %H
  • %m-%d-%Y %H %P
  • %m-%d-%Y %H %p
  • %m-%d-%Y %I %P
  • %m-%d-%Y %I %p
  • %m-%d-%Y %H%M
  • %m-%d-%Y %H%M %P
  • %m-%d-%Y %H%M %p
  • %m-%d-%Y %I%M %P
  • %m-%d-%Y %I%M %p
  • %m-%d-%Y %H%M%S
  • %m-%d-%Y %H%M%S %P
  • %m-%d-%Y %H%M%S %p
  • %m-%d-%Y %I%M%S %P
  • %m-%d-%Y %I%M%S %p
  • %m-%d-%Y %H%M%S %z
  • %m-%d-%Y %H:%M
  • %m-%d-%Y %H:%M %P
  • %m-%d-%Y %H:%M %p
  • %m-%d-%Y %I:%M %P
  • %m-%d-%Y %I:%M %p
  • %m-%d-%Y %H:%M:%S
  • %m-%d-%Y %H:%M:%S %P
  • %m-%d-%Y %H:%M:%S %p
  • %m-%d-%Y %I:%M:%S %P
  • %m-%d-%Y %I:%M:%S %p
  • %m-%d-%Y %H:%M:%S %z
  • %m-%d-%Y %H-%M
  • %m-%d-%Y %H-%M %P
  • %m-%d-%Y %H-%M %p
  • %m-%d-%Y %I-%M %P
  • %m-%d-%Y %I-%M %p
  • %m-%d-%Y %H-%M-%S
  • %m-%d-%Y %H-%M-%S %P
  • %m-%d-%Y %H-%M-%S %p
  • %m-%d-%Y %I-%M-%S %P
  • %m-%d-%Y %I-%M-%S %p
  • %m-%d-%Y %H-%M-%S %z
  • %m-%d-%Y T %H
  • %m-%d-%Y T %H %P
  • %m-%d-%Y T %H %p
  • %m-%d-%Y T %I %P
  • %m-%d-%Y T %I %p
  • %m-%d-%Y T %H%M
  • %m-%d-%Y T %H%M %P
  • %m-%d-%Y T %H%M %p
  • %m-%d-%Y T %I%M %P
  • %m-%d-%Y T %I%M %p
  • %m-%d-%Y T %H%M%S
  • %m-%d-%Y T %H%M%S %P
  • %m-%d-%Y T %H%M%S %p
  • %m-%d-%Y T %H%M%S %z
  • %m-%d-%Y T %I%M%S %P
  • %m-%d-%Y T %I%M%S %p
  • %m-%d-%Y T %H:%M
  • %m-%d-%Y T %H:%M %P
  • %m-%d-%Y T %H:%M %p
  • %m-%d-%Y T %I:%M %P
  • %m-%d-%Y T %I:%M %p
  • %m-%d-%Y T %H:%M:%S
  • %m-%d-%Y T %H:%M:%S %P
  • %m-%d-%Y T %H:%M:%S %p
  • %m-%d-%Y T %I:%M:%S %P
  • %m-%d-%Y T %I:%M:%S %p
  • %m-%d-%Y T %H:%M:%S %z
  • %m-%d-%Y T %H-%M
  • %m-%d-%Y T %H-%M %P
  • %m-%d-%Y T %H-%M %p
  • %m-%d-%Y T %I-%M %P
  • %m-%d-%Y T %I-%M %p
  • %m-%d-%Y T %H-%M-%S
  • %m-%d-%Y T %H-%M-%S %P
  • %m-%d-%Y T %H-%M-%S %p
  • %m-%d-%Y T %I-%M-%S %P
  • %m-%d-%Y T %I-%M-%S %p
  • %m-%d-%Y T %H-%M-%S %z
  • %m/%d/%y %H
  • %m/%d/%y %H %P
  • %m/%d/%y %H %p
  • %m/%d/%y %I %P
  • %m/%d/%y %I %p
  • %m/%d/%y %H%M
  • %m/%d/%y %H%M %P
  • %m/%d/%y %H%M %p
  • %m/%d/%y %I%M %P
  • %m/%d/%y %I%M %p
  • %m/%d/%y %H%M%S
  • %m/%d/%y %H%M%S %P
  • %m/%d/%y %H%M%S %p
  • %m/%d/%y %I%M%S %P
  • %m/%d/%y %I%M%S %p
  • %m/%d/%y %H%M%S %z
  • %m/%d/%y %H:%M
  • %m/%d/%y %H:%M %P
  • %m/%d/%y %H:%M %p
  • %m/%d/%y %I:%M %P
  • %m/%d/%y %I:%M %p
  • %m/%d/%y %H:%M:%S
  • %m/%d/%y %H:%M:%S %P
  • %m/%d/%y %H:%M:%S %p
  • %m/%d/%y %I:%M:%S %P
  • %m/%d/%y %I:%M:%S %p
  • %m/%d/%y %H:%M:%S %z
  • %m/%d/%y %H-%M
  • %m/%d/%y %H-%M %P
  • %m/%d/%y %H-%M %p
  • %m/%d/%y %I-%M %P
  • %m/%d/%y %I-%M %p
  • %m/%d/%y %H-%M-%S
  • %m/%d/%y %H-%M-%S %P
  • %m/%d/%y %H-%M-%S %p
  • %m/%d/%y %I-%M-%S %P
  • %m/%d/%y %I-%M-%S %p
  • %m/%d/%y %H-%M-%S %z
  • %m/%d/%y T %H
  • %m/%d/%y T %H %P
  • %m/%d/%y T %H %p
  • %m/%d/%y T %I %P
  • %m/%d/%y T %I %p
  • %m/%d/%y T %H%M
  • %m/%d/%y T %H%M %P
  • %m/%d/%y T %H%M %p
  • %m/%d/%y T %I%M %P
  • %m/%d/%y T %I%M %p
  • %m/%d/%y T %H%M%S
  • %m/%d/%y T %H%M%S %P
  • %m/%d/%y T %H%M%S %p
  • %m/%d/%y T %I%M%S %P
  • %m/%d/%y T %I%M%S %p
  • %m/%d/%y T %H%M%S %z
  • %m/%d/%y T %H:%M
  • %m/%d/%y T %H:%M %P
  • %m/%d/%y T %H:%M %p
  • %m/%d/%y T %I:%M %P
  • %m/%d/%y T %I:%M %p
  • %m/%d/%y T %H:%M:%S
  • %m/%d/%y T %H:%M:%S %P
  • %m/%d/%y T %H:%M:%S %p
  • %m/%d/%y T %I:%M:%S %P
  • %m/%d/%y T %I:%M:%S %p
  • %m/%d/%y T %H:%M:%S %z
  • %m/%d/%y T %H-%M
  • %m/%d/%y T %H-%M %P
  • %m/%d/%y T %H-%M %p
  • %m/%d/%y T %I-%M %P
  • %m/%d/%y T %I-%M %p
  • %m/%d/%y T %H-%M-%S
  • %m/%d/%y T %H-%M-%S %P
  • %m/%d/%y T %H-%M-%S %p
  • %m/%d/%y T %I-%M-%S %P
  • %m/%d/%y T %I-%M-%S %p
  • %m/%d/%y T %H-%M-%S %z
  • %Y/%m/%d %H
  • %Y/%m/%d %H %P
  • %Y/%m/%d %H %p
  • %Y/%m/%d %I %P
  • %Y/%m/%d %I %p
  • %Y/%m/%d %H%M
  • %Y/%m/%d %H%M %P
  • %Y/%m/%d %H%M %p
  • %Y/%m/%d %I%M %P
  • %Y/%m/%d %I%M %p
  • %Y/%m/%d %H%M%S
  • %Y/%m/%d %H%M%S %P
  • %Y/%m/%d %H%M%S %p
  • %Y/%m/%d %I%M%S %P
  • %Y/%m/%d %I%M%S %p
  • %Y/%m/%d %H%M%S %z
  • %Y/%m/%d %H:%M
  • %Y/%m/%d %H:%M %P
  • %Y/%m/%d %H:%M %p
  • %Y/%m/%d %I:%M %P
  • %Y/%m/%d %I:%M %p
  • %Y/%m/%d %H:%M:%S
  • %Y/%m/%d %H:%M:%S %P
  • %Y/%m/%d %H:%M:%S %p
  • %Y/%m/%d %I:%M:%S %P
  • %Y/%m/%d %I:%M:%S %p
  • %Y/%m/%d %H:%M:%S %z
  • %Y/%m/%d %H-%M
  • %Y/%m/%d %H-%M %P
  • %Y/%m/%d %H-%M %p
  • %Y/%m/%d %I-%M %P
  • %Y/%m/%d %I-%M %p
  • %Y/%m/%d %H-%M-%S
  • %Y/%m/%d %H-%M-%S %P
  • %Y/%m/%d %H-%M-%S %p
  • %Y/%m/%d %I-%M-%S %P
  • %Y/%m/%d %I-%M-%S %p
  • %Y/%m/%d %H-%M-%S %z
  • %Y/%m/%d T %H
  • %Y/%m/%d T %H %P
  • %Y/%m/%d T %H %p
  • %Y/%m/%d T %I %P
  • %Y/%m/%d T %I %p
  • %Y/%m/%d T %H%M
  • %Y/%m/%d T %H%M %P
  • %Y/%m/%d T %H%M %p
  • %Y/%m/%d T %I%M %P
  • %Y/%m/%d T %I%M %p
  • %Y/%m/%d T %H%M%S
  • %Y/%m/%d T %H%M%S %P
  • %Y/%m/%d T %H%M%S %p
  • %Y/%m/%d T %I%M%S %P
  • %Y/%m/%d T %I%M%S %p
  • %Y/%m/%d T %H%M%S %z
  • %Y/%m/%d T %H:%M
  • %Y/%m/%d T %H:%M %P
  • %Y/%m/%d T %H:%M %p
  • %Y/%m/%d T %I:%M %P
  • %Y/%m/%d T %I:%M %p
  • %Y/%m/%d T %H:%M:%S
  • %Y/%m/%d T %H:%M:%S %P
  • %Y/%m/%d T %H:%M:%S %p
  • %Y/%m/%d T %I:%M:%S %P
  • %Y/%m/%d T %I:%M:%S %p
  • %Y/%m/%d T %H:%M:%S %z
  • %Y/%m/%d T %H-%M
  • %Y/%m/%d T %H-%M %P
  • %Y/%m/%d T %H-%M %p
  • %Y/%m/%d T %I-%M %P
  • %Y/%m/%d T %I-%M %p
  • %Y/%m/%d T %H-%M-%S
  • %Y/%m/%d T %H-%M-%S %P
  • %Y/%m/%d T %H-%M-%S %p
  • %Y/%m/%d T %I-%M-%S %P
  • %Y/%m/%d T %I-%M-%S %p
  • %Y/%m/%d T %H-%M-%S %z
  • %Y-%m-%d %H
  • %Y-%m-%d %H %P
  • %Y-%m-%d %H %p
  • %Y-%m-%d %I %P
  • %Y-%m-%d %I %p
  • %Y-%m-%d %H%M
  • %Y-%m-%d %H%M %P
  • %Y-%m-%d %H%M %p
  • %Y-%m-%d %I%M %P
  • %Y-%m-%d %I%M %p
  • %Y-%m-%d %H%M%S
  • %Y-%m-%d %H%M%S %P
  • %Y-%m-%d %H%M%S %p
  • %Y-%m-%d %I%M%S %P
  • %Y-%m-%d %I%M%S %p
  • %Y-%m-%d %H%M%S %z
  • %Y-%m-%d %H:%M
  • %Y-%m-%d %H:%M %P
  • %Y-%m-%d %H:%M %p
  • %Y-%m-%d %I:%M %P
  • %Y-%m-%d %I:%M %p
  • %Y-%m-%d %H:%M:%S
  • %Y-%m-%d %H:%M:%S %P
  • %Y-%m-%d %H:%M:%S %p
  • %Y-%m-%d %I:%M:%S %P
  • %Y-%m-%d %I:%M:%S %p
  • %Y-%m-%d %H:%M:%S %z
  • %Y-%m-%d %H-%M
  • %Y-%m-%d %H-%M %P
  • %Y-%m-%d %H-%M %p
  • %Y-%m-%d %I-%M %P
  • %Y-%m-%d %I-%M %p
  • %Y-%m-%d %H-%M-%S
  • %Y-%m-%d %H-%M-%S %P
  • %Y-%m-%d %H-%M-%S %p
  • %Y-%m-%d %I-%M-%S %P
  • %Y-%m-%d %I-%M-%S %p
  • %Y-%m-%d %H-%M-%S %z
  • %Y-%m-%d T %H
  • %Y-%m-%d T %H %P
  • %Y-%m-%d T %H %p
  • %Y-%m-%d T %I %P
  • %Y-%m-%d T %I %p
  • %Y-%m-%d T %H%M
  • %Y-%m-%d T %H%M %P
  • %Y-%m-%d T %H%M %p
  • %Y-%m-%d T %I%M %P
  • %Y-%m-%d T %I%M %p
  • %Y-%m-%d T %H%M%S
  • %Y-%m-%d T %H%M%S %P
  • %Y-%m-%d T %H%M%S %p
  • %Y-%m-%d T %I%M%S %P
  • %Y-%m-%d T %I%M%S %p
  • %Y-%m-%d T %H%M%S %z
  • %Y-%m-%d T %H:%M
  • %Y-%m-%d T %H:%M %P
  • %Y-%m-%d T %H:%M %p
  • %Y-%m-%d T %I:%M %P
  • %Y-%m-%d T %I:%M %p
  • %Y-%m-%d T %H:%M:%S
  • %Y-%m-%d T %H:%M:%S %P
  • %Y-%m-%d T %H:%M:%S %p
  • %Y-%m-%d T %I:%M:%S %P
  • %Y-%m-%d T %I:%M:%S %p
  • %Y-%m-%d T %H:%M:%S %z
  • %Y-%m-%d T %H-%M
  • %Y-%m-%d T %H-%M %P
  • %Y-%m-%d T %H-%M %p
  • %Y-%m-%d T %I-%M %P
  • %Y-%m-%d T %I-%M %p
  • %Y-%m-%d T %H-%M-%S
  • %Y-%m-%d T %H-%M-%S %P
  • %Y-%m-%d T %H-%M-%S %p
  • %Y-%m-%d T %I-%M-%S %P
  • %Y-%m-%d T %I-%M-%S %p
  • %Y-%m-%d T %H-%M-%S %z
  • %m/%d/%Y
  • %m-%d-%Y
  • %m-%d-%y
  • %m/%d/%y
  • %m%d%Y
  • %m%d%y
  • %Y/%m/%d
  • %Y-%m-%d
Parameters
[in]timestrThe time string to parse.
[in]tzThe time zone to use. If NULL the local system time zone will be used. This will only be used if the parsed time does not include a fixed time zone offset.
[in]default_end_of_dayM_TRUE when the returned time be at the end of the day if a time is not explictly present in the string.
Returns
M_time_t of the parsed time. -1 on error.
See also
M_time_parsefmt

◆ M_time_to_str()

char * M_time_to_str ( const char *  fmt,
const M_time_localtm_t *  tm 
)

Format a date and time as a string.

Parameters
[in]fmtThe format of the string.
[in]tmThe tm strcut to read from.

Supports the following format options

  • %% - The % character.
  • %a - Weekday abbreviation (ex: Wed) - English only. Output only.
  • %b - Month abbreviation (ex: Jan) - English only. Output only.
  • %m - month in 2 digit format.
  • %d - day in 2 digit format.
  • %y - year in 2 digit format.
  • %Y - year in 4 digit format.
  • %H - hour in 2 digit (24 hour) format.
  • %I - hour in 2 digit (12 hour) format. Should be paired with am/pm descriptors.
  • %M - minutes in 2 digit format.
  • %S - seconds in 2 digit format.
  • %T - shortcut for "%H:%M:%S".
  • %P, %p - AM/PM, am/pm.
  • %z - timezone [+-]hhmm
  • %Z - timezone abbreviation (ex EST, EDT)
    Returns
    NULL if failed to format string. Otherwise returns a NULL terminated string.
    See also
    M_time_parsefmt

◆ M_time_parsefmt()

char * M_time_parsefmt ( const char *  s,
const char *  fmt,
M_time_localtm_t *  tm 
)

Parse a formatted time string into a tm structure.

Supports the following input descriptors:

  • %% - The % character.
  • %m - month in 2 digit format.
  • %d - day in 2 digit format.
  • %y - year in 2 digit format.
  • %Y - year in 4 digit format.
  • %H - hour in 2 digit (24 hour) format.
  • %I - hour in 2 digit (12 hour) format. Should be paired with am/pm descriptors.
  • %M - minutes in 2 digit format.
  • %S - seconds in 2 digit format.
  • %z - offset from gmt. RFC-822 Character(s) identifier or ISO 8601 [+-]hh[[:]mm] numeric offset.
  • %P, %p - AM/PM, am/pm (can parse A.M./P.M./a.m./p.m.).

Notes on format:

  • Whitespace between descriptors is ignored but non-whitespace characters are not.
    • E.G: "%m%d" is equivalent to "%m %d" but not equivalent to "%m 7 %d".
  • YY is calculated as current year -80 to +20.
  • E.g. YY = 30. Current year is 2013. Parsed year will be 2030. YY = 50. Current year is 2013. Parsed year will be 1950.
  • z supports multiple representations of the zone information based on RFC-822 and ISO 8601:
    • +/- Digit:
    • [+-]hh[[:]mm] Named:
      • UTC/GMT/UT/Z = 0
      • EST/EDT = -5/-4
      • CST/CDT = -6/-5
      • MST/MDT = -7/-6
      • PST/PDT = -8/-7 1ALPHA:
        • A: -1 (J not used) to M: -12
        • N: +1 to Y: +12
Parameters
[in]sThe string to parse.
[in]fmtThe format of the string.
[out]tmThe tm strcut to fill.
Returns
NULL if failed to match format otherwise returns pointer to where it stopped processing in the buffer. If successfully processed entire buffer then returns pointer to NULL byte in buffer.
See also
M_time_from_str