0

Angenommen, ich habe zwei ParameterIch habe eine Methode, die Zeitzone Namen als Parameter und gibt die Tageskomponente des aktuellen Datums. Aber es gibt verschiedene falsche Ergebnisse

Australien/Sydney (GMT + 10) versetzt 36000 & Asia/Kolkata (IST) Offset 19800

wie Zeitzonen, gibt es unterschiedliche Werte für die Tagesbestandteil des aktuellen Tages selbst. Ich bin nicht in der Lage, herauszufinden, was ich falsch mache .. :(Eine wenig Ahnung wird

-(NSInteger)getDayWithTimeZoneName:(NSString *)timeZoneName{ 

    // Instantiate a timezone 
    NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:timeZoneName]; 

    //Instantiate a date formatter 
    NSDateFormatter *df = [[NSDateFormatter alloc] init]; 
    [df setLocale:[NSLocale currentLocale]]; 
    [df setTimeZone:timeZone]; 
    [df setDateFormat:@"yyyy-MM-dd"]; 

    NSString *dateStr = [df stringFromDate:[NSDate date]]; 
    NSDate *date = [df dateFromString:dateStr]; 
// NSDateComponents *components = [[NSCalendar currentCalendar] components: NSCalendarUnitDay fromDate:date]; 
    NSDateComponents *components = [[[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar]components:NSDayCalendarUnit fromDate:date]; 
    NSInteger day = [components day]; 

    NSLog(@"Date component for timeZone %@ is %ld", timeZoneName,(long)day); 
    return day; 
} 
+1

„es gibt unterschiedliche Werte für die Tageskomponente des laufenden Tages“ Ist das nicht für bestimmte Zeiten des Tages zu erwarten? – trojanfoe

+0

Ich bin in dieser Sache verwirrt. Wenn ich diesen Code für zwei verschiedene Zeitzonen am selben Tag ausführen. [NSDatum] Wie kann es einen anderen Wert für die Tageskomponente geben? Für diese Zeitzone (Asien/Kolkata) erhalte ich die Tageskomponente = 16, und für Australien/Sydney erhalte ich die Tageskomponente = 15 –

+0

Sie bezieht sich wahrscheinlich auf '[NSDate date]', da dies das aktuelle Datum/die Uhrzeit in der GMT Zeitzone ('NSDate' hat keine Zeitzone). – trojanfoe

Antwort

0

NSFormatter ist nicht darauf ausgelegt, konvertieren oder berechnen Daten geschätzt werden:

NSString *dateStr = [df stringFromDate:[NSDate date]]; 

dateStr ist die Datum in Sydney (2016.05.16 00.00).

NSDate *date = [df dateFromString:dateStr]; 

date ist GMT, 10 Stunden hinter Sydney (2016.05.15 14.00 Uhr).

Verwendung NSCalendar Daten zu berechnen:

NSCalendar *calendar = [NSCalendar currentCalendar]; 
calendar.timeZone = timeZone; 
NSDateComponents *components = [calendar components:NSCalendarUnitDay fromDate:[NSDate date]]; 
NSInteger day = [components day]; 
+0

Arbeitete wie ein Charme :) –