format strings

Date and time format elements for parsing/printing are defined by the following groups of characters

element aliases description
d D One- or two-digit day.
dd DD Two-digit day. Single-digit day values are preceded by a zero.
th st/TH/ST Two-character ordinal suffix. (lower/uppercase) Must immediately follow d/D/dd/DD.
ddd Ddd/DDD Three-character weekday abbreviation. (lowercase/capitalised/uppercase)
dddd Dddd/DDDD Full weekday name. (lowercase/capitalised/uppercase)
doy Day of year (1..366).
h H One- or two-digit hour. (See am/pm notes below.)
hh HH Two-digit hour. Single-digit values are preceded by a zero. ("")
m mm Two-digit minute. Single-digit values are preceded by a zero. (NB not M/MM)
s ss/S/SS Two-digit second. Single-digit values are preceded by a zero.
pm am/PM/AM Two-letter am/pm abbreviation, prior hour must exist. (lower/uppercase)
M One- or two-digit month number. (NB not m)
MM Two-digit month number. Single-digit values are preceded by a zero. (NB not mm)
mmm Mmm/MMM Three-character month abbreviation. (lowercase/capitalised/uppercase)
mmmm Mmmm/MMMM Full month name. (lowercase/capitalised/uppercase)
y yy/Y/YY One- or two-digit year.
yyyy YYYY Four-digit year.
tz TZ Three- or four-character uppercase time zone
tzz Tzz/TZZ Full time zone name. (capitalised)
Examples
"YYYY/MM/DD ham tz"                         "Ddd, Mmm dst, yyyy"
"YYYY/MM/DD ham"                            "Ddd, Mmm dth, yyyy"
"DD Mmm YY"             "ham tz"            "DDD, Mmm dST, yyyy"
"M/D/YY"                "ham"               "Ddd, MMM DTH, yyyy"
"D/M/Y"                 "hpm tz"            "Ddd, Mmm dth, YYYY, h:mmpm tz"
"M/D/Y"                 "hpm"               "Ddd, Mmm dth, YYYY, h:mmpm"
"M/D/YYY"               "h:m:s am"          "Dddd, Mmmm dth, YYYY, h:mmpm"
"MM/DD/YY"              "h:m:sam"           "Dddd, Mmmm dd, yyyy"
"M/DD/YY"               " (tzz)"            "Dddd, Mmmm d, YYYY"
"M/DD/YYYY"                                 "Dddd d Mmmm yyyy h:mmpm tz"
"YYYY-MM-DD"                                "Mmmm d, yyyy, hh:mm:ss"
"D/M/YYYY hpm TZ"                           "Mmmm dth yyyy h:mmam tz"                       
"D/M/YYYY hpm (Tzz)"                        "Mmmm dth yyyy h:mmam"                          
"dd-Mmm-YY"                                 "Mmmm d yyyy h:mmpm tz"
"'Today is' Dddd, Mmmm dth, YYYY" -- (put literals in single quotes)
"'Today''''s date is' Dddd, Mmmm dth, YYYY"
WRONG
"dd/mm/yyyy"    -- would be day/minute/year!!
"HH:MM"         -- would be hour/month!!

An error (3 element sequence) is returned if minute immediately follows day or year, or if month immediately follows hour or precedes second or ampm.
(But not if minute immedately precedes year or day, since "1:50 [2016] 2nd Jan" is fine, and month immediately preceding hour or day is fine.)