2016-11-21 5 views
0

Ich habe seltsame Ergebnis versucht, NSDate Objekt aus NSString auszugeben. Mein NSString ist: 1976.06.11 Meine Methode zu konvertieren ist:Weird-Konvertierung Ausgabe von NSString zu NSDate

-(NSDate*)dateFromString:(NSString *)dateString{ 

    // Convert string to date object 
    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
    [dateFormat setDateFormat:@"yyyy-MM-dd"]; 
    NSDate *date = [dateFormat dateFromString:dateString]; 
    return date; 
} 

Aber es Ausgabe 1976-06-10 21:00:00 +0000

Wie konnte das passieren? Unterschied in 1 Tag.

+0

Was ist dein dateString für eine solche Ausgabe? –

+0

Zeitzonenproblem. Versuchen Sie, NSDateFormatter –

+1

Zeitzone geben Unterschied ist 3 Stunden, kein Tag. Ihre Zeitzone ist UTC + 3, nicht wahr? 'NSLog' druckt Daten immer in UTC, das Datum ist korrekt. – vadian

Antwort

1

Sie können Methoden nach einem UTC-Datum String in UTC-Datum und lokales Datum

- (NSDate *)convertIntoGMTZoneDate:(NSString *)dateString 
    { 
     NSDateFormatter *gmtFormatter = [[NSDateFormatter alloc]init]; 
     [gmtFormatter setDateStyle:NSDateFormatterFullStyle]; 
     [gmtFormatter setTimeStyle:NSDateFormatterFullStyle]; 
     [gmtFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"GMT"]]; 

     return [gmtFormatter dateFromString:dateString]; 
    } 

    - (NSDate *)convertIntoSystemZoneDate:(NSString *)dateString 
    { 
     NSDateFormatter *systemZoneFormatter = [[NSDateFormatter alloc]init]; 
     [systemZoneFormatter setDateStyle:NSDateFormatterFullStyle]; 
     [systemZoneFormatter setTimeStyle:NSDateFormatterFullStyle]; 
     [systemZoneFormatter setTimeZone:[NSTimeZone systemTimeZone]]; 

     return [systemZoneFormatter dateFromString:dateString]; 
    } 
2

Sie haben ein Datum im UTC-Format. Verwenden Sie diesen Code Ihr Datum zu Ortszeit Umwandlung:

NSTimeInterval seconds; // assume this exists 
NSDate *ts_utc = [NSDate dateWithTimeIntervalSince1970:seconds]; 

NSDateFormatter *utcFormatter = [[NSDateFormatter alloc] init]; 
utcFormatter.timeZone = [NSTimeZone timeZoneWithName:@"UTC"]; 
utcFormatter.dateFormat = @"yyyy.MM.dd G 'at' HH:mm:ss zzz"; 

NSDateFormatter *localFormatter = [[NSDateFormatter alloc] init]; 
localFormatter.timeZone = [NSTimeZone timeZoneWithName:@"EST"]; 
localFormatter.dateFormat = @"yyyy.MM.dd G 'at' HH:mm:ss zzz"; 

NSString *utcDateString = [utcFormatter stringFromDate:ts_utc]; 
NSString *LocalDateString = [localFormatter stringFromDate:ts_utc]; 

Oder Sie können [NSTimeZone defaultTimeZone] verwenden, um hartcodierte Zeichenfolgen für Zeitzone Namen zu verhindern. Diese Methode gibt die Systemzeitzone zurück, wenn keine Standardzeitzone festgelegt wurde.

1
func dateFromString(dateString: String) -> NSDate { 
    // Convert string to date object 
    var dateFormat = NSDateFormatter() 
    dateFormat.dateFormat = "yyyy-MM-dd" 
    dateFormat.timeZone = NSTimeZone(name: "UTC") 
    var date = dateFormat.dateFromString(dateString)! 
    print(date) 
    return date 
} 

Ausgang: 1976-06-11 00:00:00 +0000

+0

danke, aber es ist nicht schnell. –

+1

verwenden Sie stattdessen [dateFormat setTimeZone: [NSTimeZone timeZoneWithName: @ "UTC"]]; – rvx

1

konvertieren Wenn Sie Code debuggen, zeigt es 1 Tag Unterschied, aber nach dem Lauf finden Sie das tatsächliche Datum, das Sie eingeben.

Es funktioniert für mich.Ich denke, es wird Ihnen helfen. Vielen Dank