2012-01-09 31 views
6

Tôi có một phương pháp,NSDateFormatter trở lại ngày không chính xác từ chuỗi

+ (NSDate *) convertToDateFrom:(NSString *) dateString 
{ 
    if (dateString == nil || [dateString isEqual:@""]) return nil; //return nil if dateString is empty 
    NSDateFormatter *df = [[NSDateFormatter alloc] init]; 
     [df setDateFormat:@"EEEE, dd MMMM yyyy HH:mm"]; 

    NSDate *date = [df dateFromString:dateString]; 

    return date; 
} 

Khi tôi vượt qua,

@"Monday, 21 November 2011 17:01" //Passed string 

Nó trả về một ngày sai,

2011-11-21 23:14:00 +0000 // Output 

Tôi không chắc chắn liệu tôi có đang sử dụng những cờ đó một cách chính xác hay NSDateFormatt hay không er là không đúng cách chuyển đổi chuỗi của tôi cho đến nay.

Tôi có làm gì sai không?

Cảm ơn

+1

Vâng, trước hết nó trở về đúng ngày, chỉ cần sai thời gian. Nếu bạn thực sự đang cho ăn vào 17:01 và quay lại 23:14 thì có lẽ bạn đang nhìn vào đối tượng NSDate sai, vì không có thiết lập múi giờ hợp lý để tạo ra sự bù đắp đó. –

Trả lời

12

+0000 vào cuối ngày cho biết GMT. Tất cả các ngày được lưu trữ liên quan đến GMT; khi bạn chuyển đổi ngày thành chuỗi hoặc ngược lại bằng cách sử dụng trình định dạng ngày, thì bù đắp cho múi giờ của bạn được bao gồm. Bạn có thể sử dụng phương thức -setTimeZone: của NSDateFormatter để đặt múi giờ được sử dụng.

Tóm lại, bạn không làm gì sai trong mã của mình. Sử dụng [df stringFromDate:date]; để thấy ngày đó là chính xác. (Bạn cũng có thể sử dụng số điện thoại -descriptionWithCalendarFormat:timeZone:locale: của NSDate.)

+0

Có vẻ như một lỗi khi tôi hỏi descriptionWithLocale nó dives tôi kết quả chính xác, funny! – doNotCheckMyBlog

+1

"description" (mà bạn nhận được theo mặc định nếu bạn chỉ cần đăng nhập đối tượng NSDate làm đối tượng) cho bạn thấy thời gian UTC. –

+0

Tôi không thể có được thời gian chính xác, nhưng ngày là chính xác.Tôi sử dụng ngày này cho EkEvent và lưu trữ sự kiện để mặc định lịch trong iPhone.Trong trường hợp đó thời gian không phù hợp.Vui lòng giúp tôi ... – IKKA

-1

Thử đặt múi giờ và miền địa phương.

[df setLocale:[NSLocale currentLocale]]; 
[df setTimeZone:[NSTimeZone systemTimeZone]]; 
+0

Tôi đã thử nhưng vẫn trả về "2011-11-21 23:14:00 +0000" – doNotCheckMyBlog

+2

Nếu tôi có thể đề xuất một số đọc ánh sáng: http: //developer.apple.com/library/mac/#documentation/Cocoa/ Khái niệm/DatesAndTimes/DatesAndTimes.html # // apple_ref/doc/uid/10000039i –

+0

Có vẻ như một lỗi khi tôi hỏi descriptionWithLocale nó mang lại cho tôi kết quả chính xác, hài hước! Kết quả cuối cùng là khác nhau giữa mô tả và mô tảWitLocale ... khác biệt một giờ: ( – doNotCheckMyBlog

0

hãy thử sử dụng

df stringFromDate:date 

Tiếp theo làm việc trên mỏ,

NSLog(@"Date for locale %@: %@", 
     [[dateFormatter locale] localeIdentifier], [df stringFromDate:date]); 

đã cho tôi đầu ra như:

Date for locale en_US: Wednesday, 26 June 2013 15:50 
Các vấn đề liên quan