我在用

NSDate *date = [NSDate date];

获取日期,但我得到的日期要2小时。

===============>>#1 票数:24 已采纳

NSDate对象没有时区。 它们代表时间上的绝对时刻。 但是,当您要求提供一个description (例如通过使用NSLog()打印),它必须选择一个时区。 最合理的“默认”选择是GMT。 如果您自己不在格林尼治标准时间(GMT),则日期似乎不正确(以您自己的抵销金额为准)。

您应该始终使用NSDateFormatter创建显示字符串。 格式化程序的时区应设置为您的时区,这是默认设置。

===============>>#2 票数:2

您可以像这样纠正日期:

NSDate * dateGMT = [NSDate date];
NSTimeInterval secondsFromGMT = [[NSTimeZone localTimeZone] secondsFromGMT];
NSDate * correctDate = [dateGMT dateByAddingTimeInterval:secondsFromGMT];

===============>>#3 票数: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;
}

  ask by MTA translate from so

未解决问题?本站智能推荐: