NSDate格式和值奇怪的行为

时间:2011-04-01 04:46:39

标签: iphone objective-c nsdate

我有以下代码:

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描述时,它会给我与字符串相同的数据。

2 个答案:

答案 0 :(得分:1)

结果不同,因为您使用通用NSDate方法打印description实例,这与您期望的输出格式不匹配。

如果您使用[df stringFromDate:myres.start_date],则应获得相同的输出。

请注意,NSDate存储了时间表示,还有许多方式来打印时间和description的方式打印时间是固定的。

description NSDate以所需格式返回字符串的唯一方法是使用类别覆盖它或使用子类。

您似乎对时间的存储和显示有一个基本的误解:您的NSDate正在存储由NSDateFormatter解析的时间,并且实际上它返回了相同的数据< / em>在其description方法中。只是以不同的形式显示

答案 1 :(得分:0)

日期格式化程序会考虑时区。当您直接使用日期时,您只需获得它的描述,这显然是祖鲁时间。