NSDateКомпоненты NSDate - PullRequest
       26

NSDateКомпоненты NSDate

25 голосов
/ 25 июня 2011

Как я могу получить NSDateComponents одного NSDate?Я не хочу, чтобы составляющие разницы между двумя датами, просто секунды, минуты, часы, день, месяц и год NSDate?

Ответы [ 4 ]

42 голосов
/ 25 июня 2011

Есть пример в Apple docs , листинг 3: Получение компонентов даты :

NSDate *today = [NSDate date];
NSCalendar *gregorian = [[NSCalendar alloc]
                         initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *weekdayComponents =
                    [gregorian components:(NSDayCalendarUnit | 
                                           NSWeekdayCalendarUnit) fromDate:today];
NSInteger day = [weekdayComponents day];
NSInteger weekday = [weekdayComponents weekday];

Обратите внимание, что вы должны 'или' вместе календарных единиц , которые вы хотите при вызове метода components.

8 голосов
/ 25 июня 2011

с использованием метода NSCalendar:

- (NSDateComponents *)components:(NSUInteger)unitFlags fromDate:(NSDate *)date

как:

unsigned unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit |  NSDayCalendarUnit;
NSDate *date = [NSDate date];


NSCalendar * cal = [NSCalendar currentCalendar];
NSDateComponents *comps = [cal components:unitFlags fromDate:date];
3 голосов
/ 18 декабря 2016

Согласно документации Apple Developer, DateComponents имеет свойства экземпляра second, minute, hour, day, month, year. Следующий код Swift 5 Playground показывает, как получить компоненты секунд, минут, часов, дня, месяца и года из экземпляра Date, используя DateComponents:

import Foundation

var calendar = Calendar(identifier: .gregorian)
calendar.timeZone = TimeZone(abbreviation: "CET")!
let date = Date()

// Get seconds, minutes, hours, day, month and year
let components = calendar.dateComponents([.second, .minute, .hour, .day, .month, .year], from: date)
let seconds = components.second
let minutes = components.minute
let hours = components.hour
let day = components.day
let month = components.month
let year = components.year

// Print components
print(String(describing: seconds)) // prints Optional(33)
print(String(describing: minutes)) // prints Optional(42)
print(String(describing: hours)) // prints Optional(22)
print(String(describing: day)) // prints Optional(17)
print(String(describing: month)) // prints Optional(12)
print(String(describing: year)) // prints Optional(2016)

/* ... */

// Set a formatter in order to display date
let formatter = DateFormatter()
formatter.dateStyle = .short
formatter.timeStyle = .long
formatter.timeZone = TimeZone(abbreviation: "CET")
formatter.locale = Locale(identifier: "fr_FR")
print(formatter.string(from: date)) // prints 17/12/2016 22:42:33 UTC+1
0 голосов
/ 27 июня 2016

в Swift 2.x необходимые компоненты передаются следующим образом.

let gregorianCalendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian) 
let weekdayHourMinutes = gregorianCalendar?.components([.Weekday, .Hour, .Minute], fromDate: date)
...