Konvertieren Sie NSDate in NSString


252

Wie kann ich konvertieren, NSDatezu , NSStringso dass nur das Jahr in @ „yyyy“ Format ausgegeben wird mit dem String?

Antworten:


468

Wie wäre es mit...

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
Dies führt zu einem Speicherverlust, da der Formatierer niemals freigegeben wird.
Mana

6
Nicht verwenden initmit NSDateFormatter. Es wurde nach iOS 3.2 entfernt . (Und wenn Sie stattdessen eine Klassenmethode verwenden, wird diese automatisch freigegeben und Sie haben auch kein
Leckproblem

3
Schlagen Sie wirklich vor, unten auf localizedStringFromDate
Oded Ben Dov

4
@zekel Ich bin mir nicht sicher, was die Dokumentation früher gesagt hat, aber jetzt schlägt sie initan mehreren Stellen vor.
Neal Ehardt

2
Ich hätte es automatisch veröffentlicht (vor 3 Jahren)
Adam Waite

283

Ich weiß nicht, wie wir das alle verpasst haben: localizedStringFromDate: dateStyle: timeStyle:

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

Ausgänge '13 / 06/12 00:22:39 GMT + 03: 00 '


Gibt es eine nette, ordentliche Möglichkeit, sie so einzulesen, wenn sie einmal in einen String geschrieben wurde? (unter Verwendung dieser NSDateFormatter-Aufzählungen)
Fonix

@Fonix Ich glaube nicht - dies ist eine lokalisierte Zeichenfolge, was bedeutet, dass sie von den Ländereinstellungen des Benutzers abhängt. Sie sollten niemals Daten in einem solchen Format speichern, da sich die Einstellungen jederzeit ändern können.
Viktor Benei

Es ist schön, wenn Sie den Formatierer selten verwenden. Ansonsten benötigen Sie einen Cache.
Mike Glukhov

In Kürze: let dateString = NSDateFormatter.localizedStringFromDate (Datum, DateStyle: .ShortStyle, timeStyle: .FullStyle);
Cristan

1
Reduzierte die Anzahl der Codes und danke, dass es perfekt funktioniert
Preetha

87

Wir hoffen, durch die Bereitstellung des normalen Formatierers einschließlich Jahr, Monat und Tag mit der Uhrzeit einen Mehrwert zu erzielen. Sie können diesen Formatierer länger als nur ein Jahr verwenden

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

24

Es gibt eine Reihe von NSDateHelfern im Internet, die ich normalerweise benutze:

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

Readme-Auszug unten:

  NSString *displayString = [NSDate stringForDisplayFromDate:date];

Dies erzeugt die folgenden Arten von Ausgabe:

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

Dies ist definitiv eine großartige Lösung. Sie müssen keine Zeit damit verschwenden, sich Gedanken darüber zu machen, wie Ihre Daten aussehen sollen, und können mit der Codierung fortfahren. :)
Kyleturner

13

In Swift:

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

In Swift 3.0 lassen Sie formatter = DateFormatter () formatter.dateFormat = "yyyy" formatter.string (von: date) zurückgeben
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
"JJJJ" gibt das Jahr für die aktuelle Woche nicht den Tag an. Verwenden Sie stattdessen "JJJJ". Weitere Informationen finden Sie in dieser SO-Frage. stackoverflow.com/questions/15133549/…
Steve Moser

Vielen Dank Steve Moser :)
SR Nayak

4

Wenn Sie nicht NSDate -descriptionWithCalendarFormat:timeZone:locale:verfügbar sind (ich glaube nicht, dass iPhone / Cocoa Touch dies beinhaltet), müssen Sie möglicherweise Strftime und Monkey mit einigen C-artigen Zeichenfolgen verwenden. Sie können den UNIX-Zeitstempel von einer NSDateVerwendung erhalten 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

Fügen Sie einfach diese Erweiterung hinzu:

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

2

Wenn Sie unter Mac OS X arbeiten, können Sie schreiben:

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

Dies ist jedoch unter iOS nicht verfügbar.


1

schnelle 4 Antwort

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

Definieren Sie Ihr eigenes Dienstprogramm für das Format Ihres Datums.

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

0

Es ist schnelles Format:

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.