NSDateFormatter formatting

Ever wonder just what you could put in NSDateFormatter format strings? Enough to actually go to the trouble of actually dumping specifiers and results? Nah, us neither. But somebody did, and here’s what they found:

a: AM/PM
A: 0~86399999 (Millisecond of Day)

c/cc: 1~7 (Day of Week)
ccc: Sun/Mon/Tue/Wed/Thu/Fri/Sat
cccc: Sunday/Monday/Tuesday/Wednesday/Thursday/Friday/Saturday

d: 1~31 (0 padded Day of Month)
D: 1~366 (0 padded Day of Year)

e: 1~7 (0 padded Day of Week)
E~EEE: Sun/Mon/Tue/Wed/Thu/Fri/Sat
EEEE: Sunday/Monday/Tuesday/Wednesday/Thursday/Friday/Saturday

F: 1~5 (0 padded Week of Month, first day of week = Monday)

g: Julian Day Number (number of days since 4713 BC January 1)
G~GGG: BC/AD (Era Designator Abbreviated)
GGGG: Before Christ/Anno Domini

h: 1~12 (0 padded Hour (12hr))
H: 0~23 (0 padded Hour (24hr))

k: 1~24 (0 padded Hour (24hr)
K: 0~11 (0 padded Hour (12hr))

L/LL: 1~12 (0 padded Month)
LLL: Jan/Feb/Mar/Apr/May/Jun/Jul/Aug/Sep/Oct/Nov/Dec
LLLL: January/February/March/April/May/June/July/August/September/October/November/December

m: 0~59 (0 padded Minute)
M/MM: 1~12 (0 padded Month)
MMM: Jan/Feb/Mar/Apr/May/Jun/Jul/Aug/Sep/Oct/Nov/Dec
MMMM: January/February/March/April/May/June/July/August/September/October/November/December

q/qq: 1~4 (0 padded Quarter)
qqq: Q1/Q2/Q3/Q4
qqqq: 1st quarter/2nd quarter/3rd quarter/4th quarter
Q/QQ: 1~4 (0 padded Quarter)
QQQ: Q1/Q2/Q3/Q4
QQQQ: 1st quarter/2nd quarter/3rd quarter/4th quarter

s: 0~59 (0 padded Second)
S: (rounded Sub-Second)

u: (0 padded Year)

v~vvv: (General GMT Timezone Abbreviation)
vvvv: (General GMT Timezone Name)

w: 1~53 (0 padded Week of Year, 1st day of week = Sunday, NB: 1st week of year starts from the last Sunday of last year)
W: 1~5 (0 padded Week of Month, 1st day of week = Sunday)

y/yyyy: (Full Year)
yy/yyy: (2 Digits Year)
Y/YYYY: (Full Year, starting from the Sunday of the 1st week of year)
YY/YYY: (2 Digits Year, starting from the Sunday of the 1st week of year)

z~zzz: (Specific GMT Timezone Abbreviation)
zzzz: (Specific GMT Timezone Name)
Z: +0000 (RFC 822 Timezone)

That should settle your date and time formatting needs once and for all!

UPDATES:

Swiftly getting a human-readable date with NSDateFormatter

Test your output online in Swift at NSDateFormatter.com!

Alex | January 28, 2009
  • Benjamin Ragheb February 17, 2009 at 12:46 am
    Is there some problem with just reading the spec linked to by the documentation? http://unicode.org/reports/tr35/tr35-6.html#Date_Format_Patterns
  • Alex February 17, 2009 at 7:40 am
    Because you should never believe a spec is implemented correctly until you run code that proves it! And even then, a healthy skepticism is still in order...
  • Sanjay June 4, 2009 at 4:12 am
    Many Many Thanks
  • Bob January 26, 2010 at 1:29 am
    hi, Alex. Thanks for your kind. I have found it more times.
  • Reuben November 21, 2010 at 9:50 pm
    Thanks for this, very handy.
  • Andy January 21, 2011 at 10:54 pm
    Thanks for this. So useful.
  • Noman February 27, 2012 at 6:24 am
    Really helpful.
  • Frank Esteban A April 10, 2012 at 10:57 pm
    thanks! =)
  • Jasvinder Singh August 22, 2012 at 4:37 am
    thanks
  • Taseen February 10, 2013 at 7:01 am
    Huge thanks.. saved me lot of time
  • Lucho September 3, 2013 at 9:05 am
    still using this info!. Thanks.
  • SLboat November 7, 2014 at 3:03 pm
    Thank for the detail intro!
  • Mike Hollingshead June 1, 2015 at 11:13 am
    thanks Alex, helped me fix the following bug [formatter setDateFormat:@"dd-mm-yyyy"]; was a bit surprised when a date showed up as 03-48-2015 :-P

Leave a Reply