从[NSDate日期]获取日期几个小时

时间:2011-12-11 19:24:25

标签: objective-c cocoa formatting timezone nsdate

我正在使用

NSDate *date = [NSDate date];

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

3 个答案:

答案 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;
}