Konvertieren Sie NSDate in NSString

252

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

4thSpace
quelle

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)
}
Allan
quelle
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 '

Oded Ben Dov
quelle
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"]; 
Al Pascual
quelle
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 ;-)
Nik Burns
quelle
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)
Dave Patrick
quelle
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);
SR Nayak
quelle
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.

pix0r
quelle
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;
}
Gank
quelle
3

Fügen Sie einfach diese Erweiterung hinzu:

extension NSDate {
    var stringValue: String {
        let formatter = NSDateFormatter()
        formatter.dateFormat = "yourDateFormat"
        return formatter.stringFromDate(self)
    }
}
Nazariy Vlizlo
quelle
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.

neoneye
quelle
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)

}
Khurram awan
quelle
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];
Shamsiddin
quelle
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]; 
}
Aks
quelle
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
Amin
quelle