2011-01-14 12 views
36

¿Cómo obtengo el año actual como cuerda en Obj-C?iphone Obtiene el año actual como cadena

También, ¿cómo puedo comparar el mismo usando otro valor de año?

¿Es aconsejable hacer una comparación de cadenas O una comparación directa de un año a otro?

Respuesta

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

Puede comparar NSString s mediante el método -isEqualToString:.

+0

¿Funciona stringFromDate bien? Creo que dice que podría no responder al selector. ¿Hay alguna otra manera? – hmthur

+0

Definitivamente funciona bien. '-stringFromDate:' es un método 'NSDateFormatter': http://developer.apple.com/library/ios/documentation/cocoa/reference/Foundation/Classes/NSDateFormatter_Class/Reference/Reference.html#//apple_ref/occ/ instm/NSDateFormatter/stringFromDate: –

+11

El formato de fecha debe ser @ "aaaa" (minúsculas). La mayúscula indica el año de la semana en la que está la fecha. Por lo tanto, para el 1 de enero de 2011, @ "YYYY" regresa en 2010. – Anna

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

Nota: hay varios identificadores de calendario además de NSGregorianCalendar. Use lo que sea apropiado para su localidad. Puede solicitar el conjunto de componentes que desee mediante la operación de bits OR o los campos juntos (por ejemplo, NSYearCalendarUnit | NSMonthCalendarUnit) y utilizando components:fromDate. Puede leer sobre esto en el Date and Time Programming Guide.

Con los componentes de calendario como tipos primitivos, las comparaciones son eficientes.

+0

la primera línea necesita 'autorelease' – DTs

+4

@DTs Creo que todos podemos asumir ARC por ahora. –

+0

@DavidH: ¿sería cierto? pero algún código es más heredado que otros. OTOH, creo que la primera línea es un método de autoreleased de todos modos. – eGanges

2

En Swift puede obtener sólo el año por el código dado

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

Salida:

0

Swift

más fácil manera de obtener los elementos de fecha como Stri opcional 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") 
Cuestiones relacionadas