Convertire NSDate in NSString


Risposte:


468

Che ne dite di...

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
Ciò produrrà una perdita di memoria, poiché il formatter non viene mai rilasciato.
mana,

6
Non usare initcon NSDateFormatter. È stato rimosso dopo iOS 3.2 . (E se usi invece un metodo di classe, verrà automaticamente rilasciato e non avrai anche il problema di perdita.)
zekel

3
Consiglio davvero di guardare sotto localizedStringFromDate
Oded Ben Dov il

4
@zekel Non sono sicuro di cosa dicesse la documentazione, ma ora suggerisce initin più punti.
Neal Ehardt,

2
L'avrei rilasciato automaticamente (3 anni fa)
Adam Waite il

283

Non so come ci siamo persi tutti: localizedStringFromDate: dateStyle: timeStyle:

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

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


una volta scritto su una stringa, esiste un modo semplice per leggerlo in questo modo? (usando quegli enumerati NSDateFormatter)
Fonix,

@Fonix Non credo - questa è una stringa localizzata, il che significa che dipende dalle impostazioni locali dell'utente. Non devi mai archiviare le date in un formato come questo perché le impostazioni possono cambiare in qualsiasi momento.
Viktor Benei,

È bello se usi il formatter raro. Altrimenti hai bisogno di una cache.
Mike Glukhov,

In rapido: let dateString = NSDateFormatter.localizedStringFromDate (date, dateStyle: .ShortStyle, timeStyle: .ullStyle);
Cristan,

1
Ridotto il numero di codici e grazie al suo perfetto funzionamento
Preetha

87

Spero di aggiungere più valore fornendo il normale formattatore incluso l'anno, il mese e il giorno con l'ora. Puoi usare questo formattatore per più di un solo anno

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

24

ci sono un certo numero di NSDateaiutanti sul web, tendo a usare:

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

Estratto del file Leggimi di seguito:

  NSString *displayString = [NSDate stringForDisplayFromDate:date];

Ciò produce i seguenti tipi di output:

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

Questa è sicuramente un'ottima soluzione. Non devi perdere tempo a preoccuparti di come devono apparire le tue date e puoi andare avanti con la programmazione. :)
kyleturner,

13

In Swift:

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

In Swift 3.0 lascia che formatter = DateFormatter () formatter.dateFormat = "yyyy" restituisca formatter.string (da: data)
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" indica l'anno della settimana in corso non il giorno. Utilizzare invece "yyyy". Vedi questa domanda SO per maggiori informazioni. stackoverflow.com/questions/15133549/…
Steve Moser,

Grazie Steve Moser :)
SR Nayak il

4

Se non hai a NSDate -descriptionWithCalendarFormat:timeZone:locale:disposizione (non credo che iPhone / Cocoa Touch lo includa) potresti dover usare strftime e monkey in giro con alcune stringhe in stile C. È possibile ottenere il timestamp UNIX da un NSDateutilizzo 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

Aggiungi questa estensione:

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

2

Se sei su Mac OS X puoi scrivere:

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

Tuttavia, questo non è disponibile su iOS.


1

risposta rapida 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

Definire la propria utilità per formattare la data richiesta nel formato della data, ad es.

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

0

È un formato rapido:

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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.