2011-01-14 17 views
36

Jak uzyskać bieżący rok jako ciąg w Obj-C?iphone Pobierz bieżący rok jako ciąg

Również w jaki sposób mogę porównać to samo, używając innej wartości z roku?

Czy zaleca się porównywanie ciągów LUB porównanie wyników z roku na rok?

Odpowiedz

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

Możesz porównać NSString s metodą -isEqualToString:.

+0

Czy stringFromDate działa poprawnie? Myślę, że mówi, że może nie odpowiadać selektorowi. Czy jest jakiś inny sposób? – hmthur

+0

Zdecydowanie działa dobrze. '-stringFromDate:' jest metodą 'NSDateFormatter': http://developer.apple.com/library/ios/documentation/cocoa/reference/Foundation/Classes/NSDateFormatter_Class/Reference/Reference.html#//apple_ref/occ/ instm/NSDateFormatter/stringFromDate: –

+11

Format daty powinien mieć postać "yyyy" (małe litery). Wielkie litery podają rok tygodnia, w którym znajduje się data. Tak więc dla 1 stycznia 2011 roku @ "YYYY" zwraca rok 2010. – Anna

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

Uwaga: oprócz NSGregorianCalendar istnieje kilka identyfikatorów kalendarzy. Użyj tego, co jest odpowiednie dla twojego regionu. Możesz poprosić o dowolny zestaw składników, które chcesz, poprzez podzielenie bitowe OR na pola (np. NSYearCalendarUnit | NSMonthCalendarUnit) i użycie zamiast tego components:fromDate. Możesz przeczytać o tym w Date and Time Programming Guide.

Przy komponentach kalendarza jako typach pierwotnych porównania są efektywne.

+0

pierwsza linia wymaga 'autorelease' – DTs

+4

@DTs Uważam, że wszyscy możemy założyć ARC już teraz. –

+0

@DavidH - czy to prawda; ale niektóre kody są bardziej starsze niż inne. OTOH, myślę, że pierwsza linia to i tak metoda autoreleased convenience. – eGanges

2

W Swift można dostać tylko roku przez danego kodu

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

wyjściowa:

0

Swift

Łatwiejszy sposób, aby uzyskać jakiekolwiek elementy data jako opcjonalna 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") 
Powiązane problemy