Formatieren von NSDate in bestimmte Stile für Jahr, Monat, Tag und Stunde, Minute, Sekunden

132

Grundsätzlich muss ich das aktuelle Datum und die aktuelle Uhrzeit separat abrufen, formatiert als:

2009-04-26 
11:06:54

Der folgende Code wird aus einer anderen Frage zum gleichen Thema generiert

jetzt: | 2009-06-01 23:18:23 +0100 | 
dateString: | 01. Juni 2009 23: 18 | 
analysiert: | 2009-06-01 23:18:00 +0100 |

Das ist fast das, wonach ich suche, aber ich möchte Tag und Uhrzeit trennen.

NSDateFormatter *format = [[NSDateFormatter alloc] init];
[format setDateFormat:@"MMM dd, yyyy HH:mm"];

NSDate *now = [[NSDate alloc] init];

NSString *dateString = [format stringFromDate:now];

NSDateFormatter *inFormat = [[NSDateFormatter alloc] init];
[inFormat setDateFormat:@"MMM dd, yyyy"];

NSDate *parsed = [inFormat dateFromString:dateString];

NSLog(@"\n"
"now:        |%@| \n"
"dateString: |%@| \n"
"parsed:     |%@|", now, dateString, parsed);
bcsantos
quelle
1
In einem Fall wie diesem, in dem Sie sich die Zeit genommen haben, den Code zu schreiben, mit dem Sie das Problem gelöst haben, würde ich ihn wahrscheinlich (in diesem Fall alles unter edit2) eher in eine Antwort als in eine Bearbeitung Ihres Beitrags einfügen. Keine große Sache, aber es macht es ein bisschen einfacher zu finden / zu sehen, dass es eine Lösung für die Frage ist.
Lawrence Johnston

Antworten:

72

Zeichenfolgen im iPhone-Format liegen im Unicode-Format vor . Hinter dem Link befindet sich eine Tabelle, in der erklärt wird, was alle oben genannten Buchstaben bedeuten, damit Sie Ihre eigenen erstellen können.

Und vergessen Sie natürlich nicht, Ihre Datumsformatierer freizugeben, wenn Sie damit fertig sind. Der obige Code leckt format, nowund inFormat.

Rob Napier
quelle
Es leckt auch bei aktiviertem ARC?
Dimme
19
Die oben genannten haben keine Lecks unter ARC (natürlich war ARC 2009 nicht verfügbar, als wir diese Diskussion hatten).
Rob Napier
194

das habe ich benutzt:

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"yyyy-MM-dd"];

NSDateFormatter *timeFormat = [[NSDateFormatter alloc] init];
[timeFormat setDateFormat:@"HH:mm:ss"];

NSDate *now = [[NSDate alloc] init];

NSString *theDate = [dateFormat stringFromDate:now];
NSString *theTime = [timeFormat stringFromDate:now];

NSLog(@"\n"
      "theDate: |%@| \n"
      "theTime: |%@| \n"
      , theDate, theTime);

[dateFormat release];
[timeFormat release];
[now release];
bcsantos
quelle
12

Sie können diese Methode verwenden, indem Sie einfach Ihr Datum an sie übergeben

-(NSString *)getDateFromString:(NSString *)string
{

    NSString * dateString = [NSString stringWithFormat: @"%@",string];

    NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"your current date format"];
    NSDate* myDate = [dateFormatter dateFromString:dateString];

    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"your desired format"];
    NSString *stringFromDate = [formatter stringFromDate:myDate];

    NSLog(@"%@", stringFromDate);
    return stringFromDate;
}
Guru
quelle
11
    NSDateFormatter *dateformat = [[NSDateFormatter alloc] init];
    [dateformat setDateFormat:@"Your Date Format"];

Stellen Sie das zurückzugebende Format auf ....

yyyy-MM-ddRückkehr 2015-12-17Datum

yyyy-MMM-dd Rückkehr 2015-Dec-17Datum

yy-MM-ddRückkehr 15-12-17Datum

dd-MM-yy Rückkehr 17-12-15Datum

dd-MM-yyyy Rückkehr 17-12-2015Datum

yyyy-MMM-dd HH:mm:ss2015-Dec-17 08:07:13Datum und Uhrzeit der Rückgabe

yyyy-MMM-dd HH:mm2015-Dec-17 08:07Datum und Uhrzeit der Rückgabe

Für weitere Details Daten und Zeitformat für Jetzt klicken.

Danke dir.....

PT Vyas
quelle
1
Bitte geben Sie eine zusätzliche Beschreibung zusammen mit dem Codebeispiel an.
Maciej Lach
Ich habe dieses Datum '2018-06-08T07: 30: 05.391Z' Ich habe 'JJJJ-MM-TT'T'HH: MM: SS.000Z' ausprobiert, aber keinen Wert erhalten.
Pramod Tapaniya
4

nichts Neues, möchte aber trotzdem meine Methode teilen:

+(NSString*) getDateStringFromSrcFormat:(NSString *) srcFormat destFormat:(NSString *)
destFormat scrString:(NSString *) srcString
{
    NSString *dateString = srcString;
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    //[dateFormatter setDateFormat:@"MM-dd-yyyy"];
    [dateFormatter setDateFormat:srcFormat];
    NSDate *date = [dateFormatter dateFromString:dateString];

    // Convert date object into desired format
    //[dateFormatter setDateFormat:@"yyyy-MM-dd"];
    [dateFormatter setDateFormat:destFormat];
    NSString *newDateString = [dateFormatter stringFromDate:date];
    return newDateString;
}
gndp
quelle
3

Für schnell

var dateString:String = "2014-05-20";
var dateFmt = NSDateFormatter()
// the format you want
dateFmt.dateFormat = "yyyy-MM-dd"
var date1:NSDate = dateFmt.dateFromString(dateString)!;

quelle
0

Swift 3

extension Date {
    
    func toString(template: String) -> String {
        let formatter = DateFormatter()
        formatter.dateFormat = DateFormatter.dateFormat(fromTemplate: template, options: 0, locale: NSLocale.current)
        return formatter.string(from: self)
    }
    
}

Verwendung

let now = Date()
let nowStr0 = now.toString(template: "EEEEdMMM") // Tuesday, May 9
let nowStr1 = now.toString(template: "yyyy-MM-dd") // 2017-05-09
let nowStr2 = now.toString(template: "HH:mm:ss") // 17:47:09

Spielen Sie mit der Vorlage, die Ihren Anforderungen entspricht. Beispiele und Dokumente hier , die Ihnen beim Erstellen der benötigten Vorlage helfen.

Hinweis

Möglicherweise möchten DateFormatterSie Ihre zwischenspeichern, wenn Sie sie TableViewbeispielsweise verwenden möchten . Um eine Idee zu geben, dauerte das Schleifen über 1000 Daten mit der obigen Funktion 0,5 SekundentoString(template: String) , verglichen mit 0,05 Sekunden mit myFormatter.string(from: Date).

frouo
quelle
Um diese Notiz zu verstärken (weil es sehr wichtig ist), können Sie Ihre Funktion so umgestalten, dass ein optionaler Parameter mit einem Standardwert der neuen Instanz verwendet wird. Ich weiß nicht, warum du herabgestimmt wurdest, also stimme ich hoch.
Vive
-6
NSDate *date         = [NSDate date];
NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"yyyy-MM-dd"]
NSString *dateString  = [df stringFromDate:date];
[df setDateFormat:@"hh:mm:ss"];
NSString *hoursString = [df stringFromDate:date];

Das ist es, du hast alles was du willst.

Nikesh K.
quelle