Convertir NSDate a NSString


Respuestas:


468

Qué tal si...

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy"];

//Optionally for time zone conversions
[formatter setTimeZone:[NSTimeZone timeZoneWithName:@"..."]];

NSString *stringFromDate = [formatter stringFromDate:myNSDateInstance];

//unless ARC is active
[formatter release];

Swift 4.2:

func stringFromDate(_ date: Date) -> String {
    let formatter = DateFormatter()
    formatter.dateFormat = "dd MMM yyyy HH:mm" //yyyy
    return formatter.string(from: date)
}

24
Esto producirá una pérdida de memoria, ya que el formateador nunca se libera.
mana

66
No lo uses initcon NSDateFormatter. Fue eliminado después de iOS 3.2 . (Y si se utiliza un método de clase en su lugar, se AutoRelease y usted no tendrá el problema de pérdida, también.)
zekel

3
Realmente sugiero mirar a continuación en localizedStringFromDate
Oded Ben Dov

44
@zekel No estoy seguro de lo que la documentación solía decir, pero ahora sugiere initen varios lugares.
Neal Ehardt

2
Lo habría lanzado automáticamente (hace 3 años)
Adam Waite

283

No sé cómo todos nos perdimos esto: localizedStringFromDate: dateStyle: timeStyle:

NSString *dateString = [NSDateFormatter localizedStringFromDate:[NSDate date] 
                                                      dateStyle:NSDateFormatterShortStyle 
                                                      timeStyle:NSDateFormatterFullStyle];
NSLog(@"%@",dateString);

salidas '13 / 06/12 00:22:39 GMT + 03: 00 '


una vez escrito en una cadena, ¿hay una buena forma ordenada de leerlo así? (usando esas enumeraciones NSDateFormatter)
Fonix

@Fonix No lo creo, esta es una cadena localizada, lo que significa que depende de la configuración regional del usuario. Nunca debe almacenar fechas en un formato como este porque la configuración puede cambiar en cualquier momento.
Viktor Benei

Es bueno si usas el formateador raro. De lo contrario, necesita un caché.
Mike Glukhov

En forma rápida: let dateString = NSDateFormatter.localizedStringFromDate (date, dateStyle: .ShortStyle, timeStyle: .FullStyle);
Cristan

1
Se redujo la cantidad de códigos y se agradece su perfecto funcionamiento
Preetha

87

Esperamos agregar más valor al proporcionar el formateador normal, incluido el año, mes y día con la hora. Puedes usar este formateador por más de un año

[dateFormat setDateFormat: @"yyyy-MM-dd HH:mm:ss zzz"]; 

24

hay una serie de NSDateayudantes en la web, tiendo a usar:

https://github.com/billymeltdown/nsdate-helper/

Extracto de léame a continuación:

  NSString *displayString = [NSDate stringForDisplayFromDate:date];

Esto produce los siguientes tipos de salida:

3:42 AM  if the date is after midnight today
Tuesday  if the date is within the last seven days
Mar 1  if the date is within the current calendar year
Mar 1, 2008  else ;-)

Esta es definitivamente una gran solución. No tiene que perder el tiempo preocupándose por cómo quiere que se vean sus fechas, y puede continuar con la codificación. :)
kyleturner

13

En Swift:

var formatter = NSDateFormatter()
formatter.dateFormat = "yyyy"
var dateString = formatter.stringFromDate(YourNSDateInstanceHERE)

En Swift 3.0, deje que formatter = DateFormatter () formatter.dateFormat = "aaaa" devuelva formatter.string (desde: fecha)
Victor Laerte

8
  NSDateFormatter *dateformate=[[NSDateFormatter alloc]init];
  [dateformate setDateFormat:@"yyyy"]; // Date formater
  NSString *date = [dateformate stringFromDate:[NSDate date]]; // Convert date to string
  NSLog(@"date :%@",date);

1
"AAAA" da el año para la semana actual, no el día. Use "aaaa" en su lugar. Vea esta pregunta SO para más información. stackoverflow.com/questions/15133549/…
Steve Moser

Gracias Steve moser :)
SR Nayak

4

Si no tienes NSDate -descriptionWithCalendarFormat:timeZone:locale:disponible (no creo que iPhone / Cocoa Touch incluya esto), es posible que necesites usar strftime y monkey con algunas cadenas de estilo C. Puede obtener la marca de tiempo UNIX de un NSDateuso NSDate -timeIntervalSince1970.


4
+(NSString*)date2str:(NSDate*)myNSDateInstance onlyDate:(BOOL)onlyDate{
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    if (onlyDate) {
        [formatter setDateFormat:@"yyyy-MM-dd"];
    }else{
        [formatter setDateFormat: @"yyyy-MM-dd HH:mm:ss"];
    }

    //Optionally for time zone conversions
    //   [formatter setTimeZone:[NSTimeZone timeZoneWithName:@"..."]];

    NSString *stringFromDate = [formatter stringFromDate:myNSDateInstance];
    return stringFromDate;
}

+(NSDate*)str2date:(NSString*)dateStr{
    if ([dateStr isKindOfClass:[NSDate class]]) {
        return (NSDate*)dateStr;
    }

    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
    [dateFormat setDateFormat:@"yyyy-MM-dd"];
    NSDate *date = [dateFormat dateFromString:dateStr];
    return date;
}

3

Solo agrega esta extensión:

extension NSDate {
    var stringValue: String {
        let formatter = NSDateFormatter()
        formatter.dateFormat = "yourDateFormat"
        return formatter.stringFromDate(self)
    }
}

2

Si estás en Mac OS X puedes escribir:

NSString* s = [[NSDate date] descriptionWithCalendarFormat:@"%Y_%m_%d_%H_%M_%S" timeZone:nil locale:nil];

Sin embargo, esto no está disponible en iOS.


1

respuesta rápida 4

static let dateformat: String = "yyyy-MM-dd'T'HH:mm:ss"
public static func stringTodate(strDate : String) -> Date
{

    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = dateformat
    let date = dateFormatter.date(from: strDate)
    return date!
}
public static func dateToString(inputdate : Date) -> String
{

    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = dateformat
    return formatter.string(from: inputdate)

}

0
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *components = [calendar components:(NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay) fromDate:myNSDateInstance];
NSInteger year = [components year];
// NSInteger month = [components month];
NSString *yearStr = [NSString stringWithFormat:@"%ld", year];

0

Defina su propia utilidad para formatear la fecha requerida.

NSString * stringFromDate(NSDate *date)  
 {   NSDateFormatter *formatter
    [[NSDateFormatter alloc] init];  
    [formatter setDateFormat:@"MM ∕ dd ∕ yyyy, hh꞉mm a"];    
    return [formatter stringFromDate:date]; 
}

0

Es un formato rápido:

func dateFormatterWithCalendar(calndarIdentifier: Calendar.Identifier, dateFormat: String) -> DateFormatter {

    let formatter = DateFormatter()
    formatter.calendar = Calendar(identifier: calndarIdentifier)
    formatter.dateFormat = dateFormat

    return formatter
}


//Usage
let date = Date()
let fotmatter = dateFormatterWithCalendar(calndarIdentifier: .gregorian, dateFormat: "yyyy")
let dateString = fotmatter.string(from: date)
print(dateString) //2018
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.