从closures几个小时

我在用

NSDate *date = [NSDate date]; 

为了得到date,但我得到的date是2个小时。

NSDate对象没有时区。 他们代表了一个绝对的时刻。 但是,当你问一个description (例如通过NSLog()打印),它必须select一个时区。 最合理的“默认”select是格林尼治标准时间。 如果你自己不在GMT,date似乎是不正确的,由你自己的偏移量。

你应该总是使用一个NSDateFormatter来创build一个string来显示。 格式化程序的时区应该设置为你的默认值。

你可以像这样纠正你的date:

 NSDate * dateGMT = [NSDate date]; NSTimeInterval secondsFromGMT = [[NSTimeZone localTimeZone] secondsFromGMT]; NSDate * correctDate = [dateGMT dateByAddingTimeInterval:secondsFromGMT]; 
 -(NSDate *)getDateInCurrentSystemTimeZone { NSDate* sourceDate = [NSDate date]; NSTimeZone* sourceTimeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT"]; NSTimeZone* destinationTimeZone = [NSTimeZone systemTimeZone]; NSInteger sourceGMTOffset = [sourceTimeZone secondsFromGMTForDate:sourceDate]; NSInteger destinationGMTOffset = [destinationTimeZone secondsFromGMTForDate:sourceDate]; NSTimeInterval interval = destinationGMTOffset - sourceGMTOffset; NSDate* destinationDate = [[NSDate alloc] initWithTimeInterval:interval sinceDate:sourceDate]; return destinationDate; }