2011-06-25 13 views
21

単一のNSDateのNSDateComponentsを取得するにはどうすればよいですか? NSDateの2つの日付、秒、分、時、日、月、年の違いの成分は欲しくないのですか?NSDateのNSDateComponents

答えて

38

の例では、リスト3、Apple docsにあります:あなたはcalendar unitsあなたがcomponentsメソッドの呼び出しで必要に「または」一緒に持って

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]; 

注:は、日付のコンポーネントを取得します。 NSCalendarのメソッドを使用して

+0

あなたはヘクタール、私を打ちます! +1 –

+0

@martin clayton、こんにちは、NSDateComponentsに特定の時間、時間、秒を設定しましたが、今度はそれらのNSDateComponentsで日付を再作成したいと思います。どうやってやるの? –

6

- (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]; 
0

は、あなたがしたいのコンポーネントは次のように渡されますから2.x。

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

アップルデベロッパAPIリファレンスによると、DateComponentssecondminutehourdaymonthyearインスタンスの特性を有しています。


次スウィフト3遊び場コードはDateComponentsを使用してDateインスタンスから秒、分、時間、日、月、年のコンポーネントを取得する方法を示しています。

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(reflecting: seconds)) // prints Optional(33) 
print(String(reflecting: minutes)) // prints Optional(42) 
print(String(reflecting: hours)) // prints Optional(22) 
print(String(reflecting: day)) // prints Optional(17) 
print(String(reflecting: month)) // prints Optional(12) 
print(String(reflecting: 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