Wie bekomme ich Tag, Monat und Jahr von NSDate im Integer-Format?


95

Ich möchte die Komponenten Tag, Monat und Jahr NSDatein ganzzahliger Form erhalten, dh wenn das Datum 1/2/1988 ist, sollte ich 1, 2 und 1988 separat als Ganzzahl erhalten. Wie kann ich das in iOS machen? Ich fand die ähnliche Frage aber die Methode descriptionWithCalendarFormat: gibt eine Warnung und scheint mittlerweile veraltet zu sein.


Siehe Konvertieren von NSDate in eine Ganzzahl, wenn nur eine einzige Ganzzahl benötigt wird NSDate.
Suragch

Antworten:


223

Hier sind Sie ja,

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

Sie können dafür NSDateComponents wie oben verwenden.

Bitte besuchen Sie diese Seite für Details.

Ich hoffe es hilft.


1
+1 für die Bereitstellung des Codes für die richtige Antwort. Sie sollten jedoch erwähnen, dass die Informationen von NSDateComponents stammen, nicht von NSDateFormatter.
Schwarzer Frosch

@Black Entschuldige dich dafür. Meine Antwort wurde aktualisiert.
Janak Nirmal

1
@ Janak Nirmal Schreiben Sie einen bestimmten Punkt, den Sie nicht erklären können, wie Sie das Zeichenfolgenformat für Tag, Monat, Jahr erhalten, das ein Benutzer nicht verstehen kann.
Annu

1
@ JanakNirmal sollten Sie erklären, wie Sie den genauen Wert erhalten.
2.

3
Um Verfallswarnungen zu vermeiden: NSDateComponents * components = [Kalenderkomponenten: NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay fromDate: currentDate];
Rodrigo Pinto

17

Ja, durch die Verwendung von NSCalendar denke ich jedoch, dass dies Ihre Arbeit machen wird.

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

13

Schnell

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

Der Einfachheit halber können Sie dies in eine NSDateErweiterung einfügen und ein Tupel zurückgeben:

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)
    }
}

Jetzt müssen Sie nur noch schreiben:

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

Wenn Sie zB nur das Jahr bekommen möchten, können Sie schreiben:

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

2
Ich mag deinen Ansatz. Ein Vorschlag ist jedoch, die Parameternamen in zu ändern (day: Int, month: Int, year: Int), damit Sie das Ergebnis verwenden date.dayMonthYear.daykönnen date.dayMonthYear.month, indem Sie ,, verwenden date.dayMonthYear.year.
Paul Peelen

9

Sie können NSDateComponents verwenden, um dies zu erhalten,

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

Setzen Sie es in eine Erweiterung und leben Sie Ihr Leben 🍸🏖

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 (Es ist eine Wiederholung früherer Antworten, löst sie jedoch für alle zukünftigen App-Projekte.)


7

Für diejenigen, die wie ich direkt aus dem Internet kopieren und einfügen, ist dies ein kleines Update für 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

Die Differenz ist NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay NSMonthCalendarUnit | NSDayCalendarUnit | NSYearCalendarUnit | NSWeekdayCalendarUnitveraltet


2

Du kannst es versuchen .......

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
Während dieser Code die Frage möglicherweise beantwortet, verbessert die Bereitstellung eines zusätzlichen Kontexts darüber, warum und / oder wie dieser Code die Frage beantwortet, ihren langfristigen Wert.
Donald Duck
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.