2011-11-18 25 views
17

Tôi đã thử các đề xuất trong các bài đăng khác tương tự như vậy mà không có kết quả. Đây là tình hình:NSDateFormatter dateFromString cung cấp ngày sai

Tôi có một NSString như thế này:

Fri November 18, 2011 

và tôi đang cố gắng để chuyển đổi đó để một ngày như thế này:

NSDateFormatter *df = [[NSDateFormatter alloc] init]; 
    [df setDateFormat:@"EE MMMM d, YYYY"]; 
    NSDate *myDate = [df dateFromString: dateString]; 

Nhưng kết quả biến mydate giữ này :

2010-12-31 00:00:00 +0000 

Có ai có bất kỳ ý tưởng nào tại sao ngày sai được chọn ra khỏi ngàyFr omString? Chuỗi là ngày 18 tháng 11, ngày được chuyển đổi là ngày 31 tháng 12 ...

Cảm ơn tất cả mọi người!

+1

Bạn nên đăng nhập giá trị của dateString để đảm bảo đó là những gì bạn mong đợi. Ngoài ra hãy thử sử dụng "EEE" thay vì "EE", "dd" thay vì "d" và "yyyy" thay vì "YYYY" để loại trừ bất kỳ sự kỳ quặc nào (mặc dù những gì bạn có vẻ như nó sẽ hoạt động) –

+0

Cảm ơn Tim - 'EEE MMMM d, yyyy' hoạt động :-) – sweaves

Trả lời

48

Bạn cần sử dụng yyyy cho năm chứ không phải YYYY.

Từ Apple reference:

Một sai lầm phổ biến là sử dụng YYYY. yyyy chỉ định năm dương lịch trong khi YYYY chỉ định năm (trong "Tuần của năm"), được sử dụng trong lịch theo tuần ISO. Trong hầu hết các trường hợp, yyyy và YYYY có cùng số lượng, tuy nhiên chúng có thể khác nhau. Thông thường bạn nên sử dụng năm dương lịch.

Và để chính xác, bạn cũng phải thay đổi EE thành EEE. Mặc dù chúng mang lại kết quả tương tự trong thử nghiệm của tôi.

+1

Thay đổi YYYY thành yyyy và EE thành EEE hoạt động hoàn hảo - cảm ơn! – sweaves

+1

Gợi ý tuyệt vời, cảm ơn! – Chengjiong

+0

làm việc này !! nhưng có điều gì đó bất thường xảy ra .. tôi đã sử dụng định dạng này để in tất cả các ngày trong năm 2013 .. chỉ vào ngày 29 tháng 12 năm 2013, tháng 12 năm 2013 được hiển thị là tháng 12, 29,30,31 2014..chúng tôi !! – iosMentalist

1

Tôi nghĩ bạn cần "EEE MMMM d, YYYY" tức là ba E là chuỗi định dạng. Nếu điều này không hiệu quả, tôi khuyên bạn nên sử dụng các chuỗi được mã hóa cứng với ngày và định dạng dễ dàng hơn để giải quyết sự cố. Xem ví dụ NSDateFormatter not working để biết thêm thông tin về chủ đề đó.

+0

Thay đổi EE thành EEE là phần 1 của vấn đề được giải quyết - cảm ơn rất nhiều! – sweaves

Các vấn đề liên quan