日期格式的当前时间显示错误 - ios

时间:2016-01-11 12:50:21

标签: ios nsdate nsdateformatter nstimezone

我正在做一个祈祷闹钟应用程序,我想将我当前的时间与获取的时间进行比较,但是当我获得当前时间时,它总是有一些时间差异如图所示;

       // getting today's date string

        NSDate *today = [NSDate date];
        NSDateFormatter *dateFormatterToday = [[NSDateFormatter alloc] init];
        dateFormatterToday.timeZone = [NSTimeZone localTimeZone];
        [dateFormatterToday setDateFormat:@"yyyy-MM-dd HH:mm a"];
        NSString *currentDateTimeString = [dateFormatterToday stringFromDate:today];

        // converting today's date string to NSDATE

        NSDateFormatter *dateFormatterTodayFinal = [[NSDateFormatter alloc] init];
        [dateFormatterTodayFinal setDateFormat:@"yyyy-MM-dd HH:mm a"];
        dateFormatterTodayFinal.timeZone = [NSTimeZone localTimeZone];
        NSDate *dateTodayFinal = [dateFormatterTodayFinal dateFromString:currentDateTimeString];  

此处currentDateTimeString,其格式为string,显示当前时间为:

  

2016-01-11 17:52 PM(这是正确的)

但是dateTodayFinalDate格式显示:

  

2016-01-11 07:22:00 +0000

我已经测试了不同的时区,但问题仍然存在,请帮助一些。谢谢。

2 个答案:

答案 0 :(得分:0)

第二个示例缺少stringFromDate调用,因此可能使用描述方法,该方法使用自己的格式,而不是dateFormatterToday格式化程序。还缺少打印电话,所以我们只能猜测。

添加:

NSString *dateTodayFinalTimeString = [dateFormatterToday stringFromDate:dateTodayFinal];
NSLog(@"dateTodayFinalTimeString: %@", dateTodayFinalTimeString);

输出:

  

dateTodayFinalTimeString:2016-01-11 07:57 AM

答案 1 :(得分:0)

NSDate没有关于timeZone的任何信息,当您将鼠标悬停在xCode中的NSDate上时,它将显示时间是UTC。

如果您想要来回转换时间,此信息(时区)也必须在您要解析的字符串中,并将时区设置回UTC:

NSDate *today = [NSDate date];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.timeZone = [NSTimeZone localTimeZone];
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss Z"];
NSString *currentDateTimeString = [dateFormatter stringFromDate:today];

// converting today's date string to NSDATE
//    
//    NSDateFormatter *dateFormatterTodayFinal = [[NSDateFormatter alloc] init];
//    [dateFormatterTodayFinal setDateFormat:@"yyyy-MM-dd HH:mm:ss Z"];
dateFormatterToday.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0];
NSDate *dateTodayFinal = [dateFormatter dateFromString:currentDateTimeString];

另请查看docs