NSDateの日、月、年を整数形式で取得する方法は?


95

日、月、年のコンポーネントをNSDate整数形式で取得したいのですが、日付が1988年1月2日の場合、整数として1、2、1988を個別に取得する必要があります。iOSでこれを行うにはどうすればよいですか?私は同様の質問を見つけましたが、方法descriptionWithCalendarFormat:警告を出し、今では廃止されているようです。


に整数が1つだけ必要な場合は、NSDateを整数に変換するを参照してくださいNSDate
Suragch 2016年

回答:


223

はい、どうぞ、

NSDate *currentDate = [NSDate date];
NSCalendar* calendar = [NSCalendar currentCalendar];
NSDateComponents* components = [calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay fromDate:currentDate]; // Get necessary date components

 [components month]; //gives you month
 [components day]; //gives you day
 [components year]; // gives you year

上記のようにNSDateComponentsを使用できます。

ご覧ください、このページを詳細については。

それが役に立てば幸い。


1
正解のコードを提供するための+1。ただし、この情報はNSDateFormatterではなくNSDateComponentsから取得されることを述べておく必要があります。
黒カエル

@Black謝罪します。私の答えを更新しました。
Janak Nirmal

1
@ Janak Nirmal Writeは、ユーザーが理解できなかった、日、月、年の文字列形式を取得する方法を説明できなかった特定のポイントである。
annu 2015年

1
@JanakNirmalは、正確な値を取得する方法を説明する必要があります。
annu 2015

3
非推奨の警告を回避するには:NSDateComponents * components = [calendar components:NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay fromDate:currentDate];
Rodrigo Pinto

17

はい、しかしNSCalendarを使用することで、これはあなたの仕事になると思います。

NSDateComponents *components = [[NSCalendar currentCalendar] components:NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit fromDate:[NSDate date]];
NSInteger day = [components day];    
NSInteger month = [components month];
NSInteger year = [components year];

13

迅速

let components = NSCalendar.currentCalendar().components([.Day, .Month, .Year], fromDate: self)
let day = components.day
let month = components.month
let year = components.year

便宜上、これをNSDate拡張機能に入れて、タプルを返すようにすることができます。

extension NSDate: Comparable {

    var dayMonthYear: (Int, Int, Int) {
        let components = NSCalendar.currentCalendar().components([.Day, .Month, .Year], fromDate: self)
        return (components.day, components.month, components.year)
    }
}

今、あなたは書くだけです:

let (day, month, year) = date.dayMonthYear

たとえば、年のみを取得したい場合は、次のように記述できます。

let (_, _, year) = date.dayMonthYear

2
私はあなたのアプローチが好きです。パラメータの命名を変更することですが、提案(day: Int, month: Int, year: Int)、あなたが使用して結果を使用することができますそのようにdate.dayMonthYear.daydate.dayMonthYear.monthdate.dayMonthYear.year
Paul Peelen

9

NSDateComponentsを使用してこれを取得できます。

NSCalendar *calendar = [NSCalendar autoupdatingCurrentCalendar];
NSDate *currDate = [NSDate date];
NSDateComponents *dComp = [calendar components:( NSYearCalendarUnit | NSMonthCalendarUnit |  NSDayCalendarUnit ) 
                                      fromDate:currDate];

int day = [dComp day];
int month = [dComp month];
int year = [dComp year];

8

それを拡張機能に入れて、あなたの人生を生きよう🍸🏖

extension Date{
    var day:Int {return Calendar.current.component(.day, from:self)}
    var month:Int {return Calendar.current.component(.month, from:self)}
    var year:Int {return Calendar.current.component(.year, from:self)}
}
Date().day//22
Date().month//4
Date().year//2017

Swift 3.0(これは以前の回答の繰り返しですが、将来のすべてのアプリプロジェクトで解決します)


7

私のように、ウェブから直接コピーして貼り付けるだけの人にとって、これはiOS 8の小さなアップデートです

NSCalendar* calendar = [NSCalendar currentCalendar];
NSDateComponents* components = [calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay fromDate:[NSDate date]];
[components day]; //Day
[components month];//Month
[components year];//Year

違いはNSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay NSMonthCalendarUnit | NSDayCalendarUnit | NSYearCalendarUnit | NSWeekdayCalendarUnit廃止されました


2

これを試すことができます……

Mycal = [NSCalendar currentCalendar];
today = [NSDate date];
compA =[Mycal components:(NSMonthCalendarUnit | NSDayCalendarUnit | NSYearCalendarUnit | NSWeekdayCalendarUnit) fromDate:today];     
FirstDateofMonth=[today dateByAddingTimeInterval:([compA day]-1)*(-24*60*60)];

compA =[Mycal components:(NSMonthCalendarUnit | NSDayCalendarUnit | NSYearCalendarUnit | NSWeekdayCalendarUnit) fromDate:FirstDateofMonth];
today = FirstDateofMonth;
compA = [Mycal components:(NSMonthCalendarUnit | NSDayCalendarUnit | NSYearCalendarUnit | NSWeekdayCalendarUnit) fromDate:today];
[compA setMonth:([compA month])];
[self DrawMonthInPortraitView];
[compA retain];

1
NSDate *currentDate = [NSDate date];
NSCalendar* calendar = [NSCalendar currentCalendar];
NSDateComponents* components = [calendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit fromDate:currentDate]; // Get necessary date components

[components month]; //gives you month
[components day]; //gives you day
[components year]; // gives you year

NSString *temp=[NSString stringWithFormat:@"Months:%d Day:%d Year:%d",[components month],  [components day],[components year]];
NSLog(@"%@",temp);

1
let date = Date()
let calendar = Calendar.current

let year = calendar.component(.year, from: date)
let month = calendar.component(.month, from: date)
let day = calendar.component(.day, from: date)
print("hours = \(year):\(month):\(day)")

1
このコードは質問に答えることがありますが、このコードが質問に答える理由や方法に関する追加のコンテキストを提供すると、長期的な価値が向上します。
ドナルドダック
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.