Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

NSDate in full style but without year

I'm working with Objective C for iPhone and have a NSDate that I want to display in full style but without the year. Right now I'm using the code below but it also show the year, and I don't want that. As I want to show the date in the right region format I cannot just delete the year in the end as in some countries the year will not be in the end but in the middle or beginning.

NSDate *testdate = [NSDate date]; NSDateFormatter *dateFormattertest = [[NSDateFormatter alloc] init]; [dateFormattertest setDateStyle:NSDateFormatterFullStyle]; [dateFormattertest setTimeStyle:NSDateFormatterNoStyle]; NSString *formattedDateString = [dateFormattertest stringFromDate:testdate]; NSLog(formattedDateString);  In US this give me: Thursday, January 14, 2010  In Sweden this give me: torsdag, 2010 januari 14 

What is the solution for this? And another question, where can I find information on how to use the setDateFormat of NSDateFormatter? I can't find information about what different letters stand for in the API.

like image 202
Martin Avatar asked Jan 14 '10 12:01

Martin


2 Answers

I know this is a pretty old question but this is the only one I found on SO that talked about the same issue I was having.

The key method to use here is: dateFormatFromTemplate

Instead of setting the style, you want to set the format as such:

NSDate *testdate = [NSDate date];  NSLocale *currentLocale = [NSLocale currentLocale];  // Set the date components you want NSString *dateComponents = @"EEEEMMMMd";  // The components will be reordered according to the locale NSString *dateFormat = [NSDateFormatter dateFormatFromTemplate:dateComponents options:0 locale:currentLocale]; NSLog(@"Date format for %@: %@", [currentLocale displayNameForKey:NSLocaleIdentifier value:[currentLocale localeIdentifier]], dateFormat);  NSDateFormatter *dateFormatter =[[NSDateFormatter alloc] init]; [dateFormatter setDateFormat:dateFormat];  NSString *formattedDateString = [dateFormatter stringFromDate:testdate]; NSLog(formattedDateString); 

Special thanks to: http://oleb.net/blog/2011/11/working-with-date-and-time-in-cocoa-part-2/

like image 185
Joss Avatar answered Sep 21 '22 18:09

Joss


Swift 3

    let template = "EEEEdMMM"      let format = DateFormatter.dateFormat(fromTemplate: template, options: 0, locale: NSLocale.current)     let formatter = DateFormatter()     formatter.dateFormat = format      let now = Date()     let whatYouWant = formatter.string(from: now) // ex: Sunday, Mar 5 

Play with template to match your needs.

Doc and examples here to help you determine the pattern you want.

like image 42
frouo Avatar answered Sep 23 '22 18:09

frouo