36
    NSDateFormatter* formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"dd-MM-YYYY HH:mm"];        
    [formatter setTimeZone:[NSTimeZone systemTimeZone]];

If i choose MM i get the month in number: 09-05-2012 15:33 If i choose MMMM i get the month in word: 09-May-2012 15:33

What i wanted, was the month in 3 letters abbreviation.
Eg: January would be Jan

In this case May is correct because it only has 3 letters.

asdfg_rocks
  • 117
  • 1
  • 11
bruno
  • 2,154
  • 5
  • 39
  • 64

7 Answers7

57

Have you tried: [formatter setDateFormat:@"dd-MMM-YYYY HH:mm"]; and then [formatter stringFromDate:someNSDate];

graver
  • 15,183
  • 4
  • 46
  • 62
32

IF you get the two things in the wrong order, you don't get the expected output.

[formatter setDateFormat:@"MMM"];
[formatter setDateStyle:NSDateFormatterMediumStyle];

does NOT give the same results as:

[formatter setDateStyle:NSDateFormatterMediumStyle];
[formatter setDateFormat:@"MMM"];

(The second of these two snippets is now happily handing out Sep Oct etc in my app)

Dan Lingman
  • 429
  • 4
  • 4
  • 1
    dateStyle and dateFormat are different things. One overrides the other, `NSDateFormatterMediumStyle` uses the system wide format for short dates, while setting the `dateFormat` to `MMM` specifies that only the shot month value should be used. – João Eduardo Sep 05 '22 at 16:11
9

In SWIFT

let dateFormatter = NSDateFormatter()

dateFormatter.dateFormat = "dd MMM yyyy HH:mm"

dateFormatter.stringFromDate(NSDate())
hellosheikh
  • 2,929
  • 8
  • 49
  • 115
7

This is a stripped down solution that works with Swift 4 in producing a 3 letter month output:

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "dd MMM YYYY, HH:mm:ss"

And to verify:

print(dateFormatter.string(from: Date())) // 20 Mar 2018, 23:41:40

As previously noted, MMM is the correct syntax for getting the desired month output.

CodeBender
  • 35,668
  • 12
  • 125
  • 132
3

for swift 4 go with:

if let dateFormatter = DateFormatter(){
    dateFormatter.dateStyle = .medium
    // eventually:
    //let locale = Locale(identifier: ...                       
    //dateFormatter!.locale = locale
    dateFormatter.dateStyle = .medium
    dateFormatter!.dateFormat = "dd MMM YYYY, HH:mm:ss"
 } else..
        ..
ingconti
  • 10,876
  • 3
  • 61
  • 48
2

Actually you can set your dateStyle to medium (ie 'Jan', 'Feb' etc) like this:

[formatter setDateStyle:NSDateFormatterMediumStyle];
Alladinian
  • 34,483
  • 6
  • 89
  • 91
1

For those who do not get a full month strong with "MMM", you can get it with

dateFormatter.dateFormat = "dd MMMM yyyy"

Tested on Swift 4.2

Totoro
  • 3,398
  • 1
  • 24
  • 39