我正在做一个祈祷闹钟应用程序,我想将我当前的时间与获取的时间进行比较,但是当我获得当前时间时,它总是有一些时间差异如图所示;
// 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(这是正确的)
但是dateTodayFinal
,Date
格式显示:
2016-01-11 07:22:00 +0000
我已经测试了不同的时区,但问题仍然存在,请帮助一些。谢谢。
答案 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。