从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; }