2011-01-14 15 views
36

Wie bekomme ich das aktuelle Jahr als String in Obj-C?iphone Erhalte das aktuelle Jahr als String

Auch wie vergleiche ich dasselbe mit einem anderen Jahreswert?

Ist es ratsam, einen String-Vergleich ODER direkten Vergleich von Jahr zu Jahr zu machen?

Antwort

101
NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
[formatter setDateFormat:@"yyyy"]; 
NSString *yearString = [formatter stringFromDate:[NSDate date]]; 

// Swift 
let dateFormatter = DateFormatter() 
dateFormatter.dateFormat = "yyyy" 
let year = dateFormatter.string(from: Date()) 

Sie können NSString s über die -isEqualToString: Methode vergleichen.

+0

Funktioniert stringFromDate? Ich denke, es sagt vielleicht nicht auf Selektor reagieren. Gibt es einen anderen Weg? – hmthur

+0

Es funktioniert definitiv gut. '-stringFromDate:' ist eine 'NSDateFormatter' Methode: http://developer.apple.com/library/ios/documentation/cocoa/reference/Foundation/Classes/NSDateFormatter_Class/Reference/Reference.html#//apple_ref/occ/ instm/NSDateFormatter/stringFromDate: –

+11

Das Datumsformat sollte @ "yyyy" (Kleinbuchstaben) sein. Der Großbuchstabe gibt das Jahr der Woche an, in dem das Datum liegt. Also für den 1. Januar 2011 gibt @ "YYYY" 2010 zurück. – Anna

29
NSCalendar *gregorian = [NSCalendar calendarWithIdentifier:NSCalendarIdentifierGregorian]; 
NSInteger year = [gregorian component:NSCalendarUnitYear fromDate:NSDate.date]; 

Hinweis: Es gibt mehrere Kalenderbezeichner neben NSGregorianCalendar. Verwenden Sie, was für Ihr Gebietsschema geeignet ist. Sie können nach beliebigen Komponenten suchen, die Sie möchten, indem Sie die Felder (z. B. NSYearCalendarUnit | NSMonthCalendarUnit) bitweise ODER verknüpfen und stattdessen components:fromDate verwenden. Sie können darüber in der Date and Time Programming Guide lesen.

Mit Kalenderkomponenten als primitive Typen sind Vergleiche effizient.

+0

die erste Zeile benötigt 'Autorelease' – DTs

+4

@DTs Ich glaube, wir können jetzt alle ARC annehmen. –

+0

@DavidH - wäre das wahr? aber einige Codes sind älter als andere. OTOH, ich denke, dass die erste Zeile sowieso eine Autoreleased-Convenience-Methode ist. – eGanges

2

In Swift können Sie nur von Jahr zu bestimmten Code

let formatter = NSDateFormatter() 
formatter.dateFormat = "yyyy" 
let dateStr = formatter.stringFromDate(NSDate()) 
print(dateStr) 

Ausgabe:

0

Swift

einfacher Weg, um alle Elemente zu erhalten von Datum als optionales Stri ng.

extension Date { 

    // Year 
    var currentYear: String? { 
    return getDateComponent(dateFormat: "yy") 
    //return getDateComponent(dateFormat: "yyyy") 
    } 


    func getDateComponent(dateFormat: String) -> String? { 
    let format = DateFormatter() 
    format.dateFormat = dateFormat 
    return format.string(from: self) 
    } 


} 


print("-- \(Date().currentYear)") // result -- Optional("2017") 
Verwandte Themen