2014-09-11 2 views
0

Учитывая пример из Convert string to date in my iPhone appЦель-C: как получить день и дату от NSDate?

NSString *dateStr = @"Tue, 25 May 2010 12:53:58 +0000"; 

// Convert string to date object 
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
[dateFormat setDateFormat:@"EE, d LLLL yyyy HH:mm:ss Z"]; 
NSDate *date = [dateFormat dateFromString:dateStr]; 
[dateFormat release]; 

я проверил, какие методы NSDate есть и нашел
enter image description here

Вопрос
Как я могу получить Tue и 25 от *date?

+5

Посмотрите на 'NSDateComponents'. – rmaddy

+1

... и чтобы сделать некоторые очевидные точки зрения, чтобы помочь вашему обучению: 'NSDate' не имеют дня в них. Они представляют собой момент времени (и, да, возможно, не имеют лучшего имени: считайте их «NSTimestamp», если это проще). Поэтому вам нужно найти календарь, где-то, чтобы ввести понятие пронумерованных дней относительно некоторой даты начала. Выход должен отличаться в зависимости от григорианского, юлианского, китайского, буддийского и т. Д., Календарей и делает. – Tommy

+0

Вне темы: Что это за документация, которую вы используете, это какой-то плагин Xcode? – chunkyguy

ответ

3

Вы должны использовать NSDateComponents для этого:

NSCalendar * calendar = [NSCalendar currentCalendar]; 
NSDateComponents * dateComponents = [calendar components: NSDayCalendarUnit | NSWeekdayCalendarUnit fromDate: <yourDate>]; 

NSLog(@"Day in week: %ld", (long)dateComponents.weekday); // Day in week: 3 
NSLog(@"Day in month: %ld", (long)dateComponents.day); // Day in month: 25 
NSLog(@"Day name: %@", calendar.shortWeekdaySymbols[dateComponents.weekday - 1]); // Day name: Tue (iOS 8.0 +) 

Или в Swift

let calendar = NSCalendar.currentCalendar() 
let dateComponents = calendar.components(.DayCalendarUnit | .WeekdayCalendarUnit, fromDate: <yourDate>) 

println("Day in week: \(dateComponents.weekday)") // Day in week: 3 
println("Day in month: \(dateComponents.day)") // Day in month: 25 
println("Day name: \(calendar.shortWeekdaySymbols[dateComponents.weekday - 1])") // Day name: Tue 
+0

Я получаю ошибку '' shortWeekdaySymbols 'недоступен: недоступен на iOS 7.1' – daydreamer

+1

'shortWeekdaySymbols' - это метод класса' NSDateFormatter', а не 'NSCalendar'. – rmaddy

+0

Это метод экземпляра на 'NSCalendar' из iOS 8.0 ... см. Https://developer.apple.com/library/prerelease/ios/releasenotes/General/iOS80APIDiffs/frameworks/Foundation.html (а также экземпляр' NSDateFormatter' * * до этого) –