2011-12-11 39 views
11

Tôi đang sử dụngBắt ngày từ [NSDate ngày] ra bởi một vài giờ

NSDate *date = [NSDate date]; 

để nhận ngày, nhưng ngày tôi nhận được tắt theo 2 giờ.

+0

Bạn có trong GMT + 2 múi giờ? –

+0

vâng, tại sao có vấn đề với điều này? – MTA

+6

Tôi đoán rằng nó cho bạn biết ngày trong múi giờ UTC thay vì ngày của bạn. –

Trả lời

20

NSDate đối tượng không có múi giờ. Chúng đại diện cho một thời điểm tuyệt đối trong thời gian. Tuy nhiên, khi bạn yêu cầu một cho description (bằng cách in nó với NSLog(), ví dụ), nó phải chọn một múi giờ. Lựa chọn "mặc định" hợp lý nhất là GMT. Nếu bạn không có trong GMT, ngày của bạn có vẻ không chính xác, bằng số tiền chênh lệch của bạn.

Bạn nên luôn sử dụng NSDateFormatter để tạo chuỗi để hiển thị. Múi giờ của trình định dạng phải được đặt thành múi giờ của bạn, là múi giờ mặc định.

2

Bạn có thể nhận ngày bạn điều chỉnh như thế này:

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; 
} 
Các vấn đề liên quan