0

我从服务器接收字符串形式的日期,我需要根据我的时区(印度:GMT +5:30)显示日期。这是我的代码

NSString *dateString = @"2015-08-10 11:45:10";

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];

    //Create the date assuming the given string is in GMT
    dateFormatter.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0];
    NSDate *date = [dateFormatter dateFromString:dateString];

    NSLog(@"%@",date);

    NSLog(@"%@",[dateFormatter stringFromDate:date]);

    //Create a date string in the local timezone
    dateFormatter.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:[NSTimeZone localTimeZone].secondsFromGMT];
    NSString *localDateString = [dateFormatter stringFromDate:date];
    NSLog(@"date = %@", localDateString);

    NSDateFormatter *dateFormatter2 = [[NSDateFormatter alloc] init];

    [dateFormatter2 setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
    dateFormatter.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:[NSTimeZone localTimeZone].secondsFromGMT];

    NSDate *date2 = [dateFormatter2 dateFromString:localDateString];

    NSLog(@"%@",date);

日志是:

2015-08-10 11:45:10 +0000 (NSDate)
2015-08-10 11:45:10 (NSString)
date = 2015-08-10 17:15:10 (NSString)
2015-08-10 11:45:10 +0000 (NSDate)

我的问题是最后一个日志 (2015-08-10 11:45:10 +0000) 为什么不是2015-08-10 17:15:10 ??

4

1 回答 1

0

最后一行打印了它的作用,因为您打印的是NSDate,并且NSDate没有时区。它实际上没有指示时区的属性或内部状态。时区仅用于向用户呈现数据,通常就像您通过NSDateFormatter. 但是如果你记录 an 的值,NSDate你会得到一个 GMT 字符串,因为它NSDate本身没有时区。

于 2015-08-04T17:51:50.393 回答