Как получить будний день и / или название месяца из переменной NSDate?

Хорошо. Проблема в том, что у нас есть NSStrings, заполненные датами в формате yyyyMMdd, и мы хотим получить текущий день недели и название месяца. Функция dagOmvandlare преобразует значение datestring в рабочий день и месяц. Затем функция вызывается в viewDidload, чтобы называть все наши названия кнопок с английского языка до шведских месяцев.

наше текущее решение выглядит так:

-(NSString *)dagOmvandlare:(id) suprDatum{ NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; dateFormatter.dateFormat = @"yyyyMMdd"; NSDate *date = [dateFormatter dateFromString:suprDatum]; NSString * monthString = [date descriptionWithCalendarFormat:@"%B"timeZone:nil locale:[[NSUserDefaults standardUserDefaults] dictionaryRepresentation]]; if ([monthString isEqualToString:@"January"]) { monthString = @"Januari"; } else if ([monthString isEqualToString:@"February"]) { monthString = @"Februari"; } else if ([monthString isEqualToString:@"May"]) { monthString = @"Maj"; } else if ([monthString isEqualToString:@"June"]) { monthString = @"Juni"; } else if ([monthString isEqualToString:@"July"]) { monthString = @"Juli"; } else if ([monthString isEqualToString:@"August"]) { monthString = @"Augusti"; } else if ([monthString isEqualToString:@"October"]) { monthString = @"Oktober"; } else if ([monthString isEqualToString:@"March"]) { monthString = @"Mars"; } return monthString; } - (void)viewDidLoad { [super viewDidLoad]; [button3 setTitle:(NSString *)[self dagOmvandlare:self.datum1] forState:UIControlStateNormal]; [button2 setTitle:(NSString *)[self dagOmvandlare:self.datum2] forState:UIControlStateNormal]; [bmanad1 setTitle:(NSString *)[self dagOmvandlare:self.datum3] forState:UIControlStateNormal]; } 

И то, что мы догадались до сих пор, состоит в том, что

 NSString * monthString = [date descriptionWithCalendarFormat:@"%B"timeZone:nil locale:[[NSUserDefaults standardUserDefaults] dictionaryRepresentation]]; 

не разрешается использовать в соответствии с рекомендациями Apple относительно непубличных api. Таким образом, основной вопрос заключается в том, какой другой способ получить день недели и название месяца из наших дат, которые содержат даты с форматом yyyyMMdd?

7 Solutions collect form web for “Как получить будний день и / или название месяца из переменной NSDate?”

Нет необходимости вручную конвертировать в шведские слова. iPhone сделает это за вас. Попробуй это:

 NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; dateFormatter.dateFormat = @"yyyyMMdd"; NSDate *date = [dateFormatter dateFromString:@"20111010"]; // set swedish locale dateFormatter.locale=[[NSLocale alloc] initWithLocaleIdentifier:@"sv_SE"]; dateFormatter.dateFormat=@"MMMM"; NSString *monthString = [[dateFormatter stringFromDate:date] capitalizedString]; NSLog(@"month: %@", monthString); dateFormatter.dateFormat=@"EEEE"; NSString *dayString = [[dateFormatter stringFromDate:date] capitalizedString]; NSLog(@"day: %@", dayString); 

Вывод:

 month: Oktober day: Måndag 
 NSString *strDate=@"20110407"; NSDateFormatter *df=[[[NSDateFormatter alloc] init] autorelease]; [df setDateFormat:@"yyyyMMdd"]; NSDate *targetDate=[df dateFromString:strDate]; [df setDateFormat:@"EEEE MMMM dd, yyyy"]; NSString *s=[df stringFromDate:targetDate]; NSLog(@"Date: %@", s); 

Простые Swift 3 расширения:

 // Weekday extension Date { func dayOfWeek() -> String? { let dateFormatter = DateFormatter() dateFormatter.dateFormat = "EEEE" return dateFormatter.string(from: self).capitalized // or capitalized(with: locale) } } print(Date().monthName()!) // Wednesday // Month Name extension Date { func monthName() -> String? { let dateFormatter = DateFormatter() dateFormatter.dateFormat = "MMMM" return dateFormatter.string(from: self).capitalized // or capitalized(with: locale) } } print(Date().monthName()!) // October 

Надеюсь это поможет

 NSCalendar *calendar= [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; NSCalendarUnit unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit; NSDate *date = [NSDate date]; NSDateComponents *dateComponents = [calendar components:unitFlags fromDate:date]; NSInteger year = [dateComponents year]; NSInteger month = [dateComponents month]; NSInteger day = [dateComponents day]; NSInteger hour = [dateComponents hour]; NSInteger minute = [dateComponents minute]; NSInteger second = [dateComponents second]; [calendar release]; 

Это может быть полезно

Другой вопрос, который может помочь вам. Как найти будний день с сегодняшней даты с помощью NSDate?

 NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateFormat:@"EEEE"]; NSString *dayName = [dateFormatter stringFromDate:Date]; 

этот деньName будет доступен в локали пользователя.

Как говорит яблоко, создавая (и позволяя ARC распоряжаться), форматировщик стоит дорого, поэтому:

1) объявить в вашем файле:

 private var localDateFormatter : DateFormatter? .. extension Date { 

2) использовать ленивый подход:

 if localDateFormatter == nil{ localDateFormatter = DateFormatter() let locale = Locale(identifier: "en_US_POSIX") ....} let newTime = localDateFormatter!.date(from: self) 

если у вас есть все в одном классе, статический / пусть член будет приятным. (мы не можем использовать vars в расширениях …: (globals кажется плохим, но никак …)

 - (void) getMonthFromDate:(NSString *) stringDate { NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; [dateFormat setDateFormat:@"yyyy-MM-dd"]; NSDate *date = [dateFormat dateFromString:stringDate]; NSCalendar* calendar = [NSCalendar currentCalendar]; NSDateComponents* components = [calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay fromDate:date]; // Get necessary date components NSLog(@"%lu", [components day]); NSLog(@"%lu %@",[components day],[[dateFormat monthSymbols] objectAtIndex:[components month]]); } 
  • Ошибка Xcode 6.4? Исходный текст текста исчезает. OSX Yosemite
  • Какую версию iOS следует настроить на осень 2012 года
  • Лучшая оценка между раскадровкой xib / nib чистое программирование
  • Изменения в sqlite в ios 7 / XCode 5
  • Сертификат, используемый для подписи «APP», либо истек, либо был отменен - ​​ios10
  • Нет опции Retina 4 в xcode 7, то как мне установить полноэкранные изображения в актив, чтобы они отображались правильно в 4s / 5s & iPhone 6?
  • tableView: dequeueReusableCellWithIdentifier проблемы с «глобальной» константой
  • Как программно установить начальное значение UISlider или как запускается программа iOS?
  • Ошибка утверждения в UITextView _firstBaselineOffsetFromTop
  • OpenURL в iOS10
  • Проект библиотеки Xcode 7.3 компилируется каждый раз
  • PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.