2017-05-23 4 views
0

Wie konvertiert man Datetime Zeitstempel zu einem NSDate? Wie macht man das Inverse?Convert Datetime C# zu Objective c und invertion

Meine Methode Datetime in eine Zeichenfolge zu konvertieren:

+(NSString*) dateTojson:(NSDate*)date{ 

    return [NSString stringWithFormat:@"/Date(%f)/",(double)([date dateWithTimeIntervalSince1970] * 1000)]; 
} 

Meine inverse Methode:

+(NSDate*) jsonToDate:(NSString *)json 
{ 
    double milisec = 0; 
    json = [[[json stringByReplacingOccurrencesOfString:@"/Date(" withString:@""] stringByReplacingOccurrencesOfString:@"/" withString:@""] stringByReplacingOccurrencesOfString:@"-0200" withString:@""]; 
    NSArray *arr = [json componentsSeparatedByString:@"-"]; 
    for(NSString *s in arr) { 
     if(![s isEqualToString:@""]){ 
      milisec += [s doubleValue]; 
     } 
    } 

    NSDate *date = [NSDate dateWithTimeIntervalSince1970:(milisec/1000.0)]; 

    return date; 
} 

Wenn ich [self jsonToDate:@"/Date(1495497600)/"] verwenden, wo 1495497600 me "2017.05.23", wobei das Verfahren darstellt, das Rück ein falsches Datum (Ergebnis = "01/18/1970"). Warum?

Hinweise:

ich bin nicht die Zeit bedenkt, nur Datum. Meine Variable milisec ist gleich 1495497600, also denke ich, das Problem ist die Methode dateWithTimeIntervalSince1970.

bereits versuchen, einige Beiträge wie:

Convert milliseconds to NSDate

How to Convert a milliseconds to nsdate in objective C

+0

1495497600 ist nicht "23.05.2013" es ist "23.05.2017". Überprüfen Sie den JSON, den Sie in dieser Zeile zurückgeben. Json = [[[] json stringByReplacingOccurrencesOfString ....... es in einen einfachen Texteditor kopieren, dort könnte ein falsch codiertes Zeichen drin sein. –

+0

Ich aktualisiere die Frage, danke –

Antwort

1

Sie nicht wirklich brauchen, um die Millisekunden am Ende zu teilen:

NSDate *date = [NSDate dateWithTimeIntervalSince1970:milisec]; 

Ergebnis:

2017-05-23 00:00:00 +0000 
+0

Danke, das funktioniert, aber warum nicht auf 1000 teilen und entweder in andere Methode multiplizieren? Dies gibt den Unterschied, und alle Antworten im Stack sagen, dass dies getan werden muss. Wie auch immer, danke nochmal. –

+0

Es liegt daran, dass deine Zeit bereits in Sekunden und nicht in Millisekunden liegt. Wenn du sie also durch 1000 dividierst, erhältst du ungefähr 18 Tage ab dem 1.1.1970. –

+1

1495497600 Sekunden/1000 Millisekunden = 1,495 × 10^9 Millisekunden seit 1/1/1970 = 01/18/1970. –