我正在使用
NSDate *date = [NSDate date];
获取日期,但我得到的日期是2小时。
答案 0 :(得分:22)
NSDate
个对象没有时区。它们代表着绝对的时刻。但是,当你问一个description
时(例如用NSLog()
打印),它必须选择一个时区。最合理的“默认”选择是GMT。如果您自己不在GMT,那么日期似乎是不正确的,取决于您自己的偏移量。
您应始终使用NSDateFormatter
创建字符串以供显示。格式化程序的时区应该设置为你的,这是默认值。
答案 1 :(得分:2)
您可以按照以下方式更正日期:
NSDate * dateGMT = [NSDate date];
NSTimeInterval secondsFromGMT = [[NSTimeZone localTimeZone] secondsFromGMT];
NSDate * correctDate = [dateGMT dateByAddingTimeInterval:secondsFromGMT];
答案 2 :(得分:0)
-(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;
}