Home > DeveloperSection > Forums > Is I am doing something wrong with NSDateFormatter or is this a bug
Tarun Kumar

Total Post:213

Points:1635
Posted on    August-25-2015 12:19 AM

 iPhone iPhone  Ios  Objective C 
Ratings:


 1 Reply(s)
 508  View(s)
Rate this:

I'm trying to print out the date in a certain format: 

NSDate *today = [[NSDate alloc] init];

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];

[dateFormatter setDateFormat:@"yyyyMMddHHmmss"];

NSString *dateStr = [dateFormatter stringFromDate:today];

 

If the iPhone is set to 24 hour time, this works fine, if on the other hand the user has set it to 24 hour time, then back to AM/PM (it works fine until you toggle this setting) then it appends the AM/PM on the end even though I didn't ask for it: 

20080927030337 PM

 

Am I doing something wrong or is this a bug with firmware 2.1? 

Edit 1: Made description clearer 

Edit 2 workaround: It turns out this is a bug, to fix it I set the AM and PM characters to "": 

[dateFormatter setAMSymbol:@""];

[dateFormatter setPMSymbol:@""];



Mikki Halpin
Mikki Halpin

Total Post:23

Points:161
Posted on    August-25-2015 11:24 PM

The reason for this behaviour is Locale, set the correct Locale, Set the local of your NSDateFormatter to en_US_POSIX will fix this. It works for both 24-hour and 12 hour format. 

On iPhone OS, the user can override the default AM/PM versus 24-hour time setting (via Settings > General > Date & Time > 24-Hour Time), which causes NSDateFormatter to rewrite the format string you set. From apple doc 

Try this, 

NSDate *today = [[NSDate alloc] init];

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];

[dateFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]];

[dateFormatter setDateFormat:@"yyyyMMddHHmmss"];

NSString *dateStr = [dateFormatter stringFromDate:today];


Don't want to miss updates? Please click the below button!

Follow MindStick