2011-12-11 57 views

回答

20

NSDate對象沒有時區。他們代表了一個絕對的時刻。但是,當您詢問description(例如通過打印NSLog())時,它必須選擇一個時區。最合理的「默認」選擇是格林威治標準時間。如果你自己不在GMT,那麼日期似乎是不正確的,以你自己的偏移量爲準。

您應始終使用NSDateFormatter創建一個字符串進行顯示。格式化程序的時區應該設置爲你的默認值。

2

你可以得到你日期更正如下:

NSDate * dateGMT = [NSDate date]; 
NSTimeInterval secondsFromGMT = [[NSTimeZone localTimeZone] secondsFromGMT]; 
NSDate * correctDate = [dateGMT dateByAddingTimeInterval:secondsFromGMT]; 
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; 
}