Как получить будний день и / или название месяца из переменной 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]]); } 
  • Недопустимый токен в начале выражения препроцессора в CoreFoundation
  • Как проверить, имеет ли Json значение null в swift?
  • Отладка запуска приложения в XCode и iOS
  • Цвет каталога свойств изображения не изменяется
  • Xcode5.1.1 и Xcode6 beta7 iOS7.1 64-бит Allocator недействителен, возвращается к malloc
  • Как создать ANE, который будет отображать плавающее окно
  • Метод uniqueIdentifier] больше не разрешен, мне нужна альтернатива
  • Xcode архивирует несколько методов с именем setScale: найден
  • Настройка RestKit в Xcode
  • Ограничение размера приложения и определение размера вашего приложения
  • Минимальные требования к OS X и xcode для разработки ios 8.1
  • Interesting Posts

    Отображение UIView Над строкой состояния Apple в iOS 8

    Сколько скрытых подклассов «NSFormatter» есть? Знаете ли вы о других?

    Добавление случайных MKnnotations вокруг текущего местоположения в MKMapView

    AVURLAsset, когда у Response нет заголовка Content-Lenght

    Доступ к Cocoapods resource_bundles

    Управление пользовательским интерфейсом во всех iPhone с различным масштабированием / разрешением

    Ошибка CFNetwork WebCore

    Можно перенести NSmanagedObject в другой NSManagedContext?

    Можем ли мы отправить бета-сборки xcode6? Как подготовить приложение для iOS8?

    Свойство alertTitle для UILocalNotification не работает

    ios – NSString URL-декодирование?

    Дженкинс: Как отметить, что сборка нестабильна, если анализатор clang обнаружил новую ошибку

    Как удалить уже установленные профили подготовки из iphone на IOS7

    Способ использования видеопотока веб-сокета с AVFoundation?

    Вертикальная прокрутка UICollectionView с ячейками для самостоятельной калибровки отображает только половину ячеек

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.