我有以下代码:
NSDateFormatter * df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
[df setTimeZone:[NSTimeZone systemTimeZone]];
[df setFormatterBehavior:NSDateFormatterBehaviorDefault];
myres.start_date = [df dateFromString:[NSString stringWithFormat:@"%@ %@", [self.data objectForKey:@"date"], [self.data objectForKey:@"start_time"]]];
NSLog(@"Start date is %@", [NSString stringWithFormat:@"%@ %@", [self.data objectForKey:@"date"], [self.data objectForKey:@"start_time"]]);
NSLog(@"Start date from NSDate is %@", myres.start_date);
myres.end_date = [df dateFromString:[NSString stringWithFormat:@"%@ %@", [self.data objectForKey:@"date"], [self.data objectForKey:@"end_time"]]];
NSLog(@"End date is %@", [NSString stringWithFormat:@"%@ %@", [self.data objectForKey:@"date"], [self.data objectForKey:@"end_time"]]);
NSLog(@"End date from NSDate is %@", myres.end_date);
我得到的结果是:
Start date is 2011-03-31 9:00:00
Start date from NSDate is 2011-03-31 16:00:00 +0000
End date is 2011-03-31 10:00:00
End date from NSDate is 2011-03-31 17:00:00 +0000
为什么结果不同? 我想拥有它,以便当我调用myres.start_date描述时,它会给我与字符串相同的数据。
答案 0 :(得分:1)
结果不同,因为您使用通用NSDate
方法打印description
实例,这与您期望的输出格式不匹配。
如果您使用[df stringFromDate:myres.start_date]
,则应获得相同的输出。
请注意,NSDate
存储了时间表示,还有许多方式来打印时间和description
的方式打印时间是固定的。
让description
NSDate
以所需格式返回字符串的唯一方法是使用类别覆盖它或使用子类。
您似乎对时间的存储和显示有一个基本的误解:您的NSDate
正在存储由NSDateFormatter
解析的时间,并且实际上它返回了相同的数据< / em>在其description
方法中。只是以不同的形式显示。
答案 1 :(得分:0)
日期格式化程序会考虑时区。当您直接使用日期时,您只需获得它的描述,这显然是祖鲁时间。