2012-09-14 36 views
31

im sử dụng xcode 4.5 (4G182) với iOS 6. NSDateFormatter hiển thị sai năm trong iOS 6, cách giải quyết?NSDateFormatter hiển thị sai năm

NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; 
[dateFormatter setDateFormat:@"YYYY-MM-dd"]; 
NSString *str = [dateFormatter stringFromDate:[NSDate date]]; 
NSLog(@"%@ == %@",str,[[dateFormatter dateFromString:str] description]); 

nó in ra " -09-14 == -09-13 16:00:00 +0000"

+0

Tôi không nghĩ đây là "sự cố iOS 6". Bạn nên sử dụng chữ thường 'y'. Xem http://stackoverflow.com/questions/6388370/string-formatted-date-picker-date-is-off/6388430#6388430. – Anna

Trả lời

97

YYYY là không giống như yyyy.

Theo số this page tham chiếu IOS Date format page;

`y`: Year 
`Y`: Year (in "Week of Year" based calendars). This year designation is used in 
    ISO year-week calendar as defined by ISO 8601, but can be used in 
    non-Gregorian based calendar systems where week date processing is desired. 
    May not always be the same value as calendar year. 

Câu hoạt động là câu cuối cùng. Sử dụng yyyy để thay thế.


Thông tin chi tiết về cách thức và lý do tại sao các giá trị năm có thể đi chệch khi sử dụng YYYY:

Năm ISO tuần đánh số bắt đầu từ ngày đầu tiên (thứ Hai) trong tuần 01 và kết thúc tại Chủ nhật trước năm ISO mới (do đó không có trùng lặp hoặc khoảng cách). Nó bao gồm 52 hoặc 53 tuần đầy đủ. Số ISO hàng năm lệch số từ số năm lịch Gregorian truyền thống vào thứ Sáu, thứ Bảy và Chủ Nhật hoặc Thứ Bảy và Chủ Nhật, hoặc chỉ một ngày Chủ Nhật, vào đầu năm lịch Gregorian truyền thống (ở cuối ISO năm đánh số thứ nhất trước đó) và Thứ Hai, Thứ Ba và Thứ Tư hoặc Thứ Hai và Thứ Ba hoặc chỉ vào Thứ Hai, vào cuối năm lịch Gregorian truyền thống (có trong tuần 01 của tuần đánh số ISO tiếp theo năm). Đối với các ngày thứ Năm, số năm theo ISO hàng năm luôn là bằng số năm dương lịch theo truyền thống.

Ví dụ:

thứ hai ngày 29 tháng 12 năm 2008 được viết " -W01-1"

Chủ Nhật 03 Tháng 1 2010 được viết " -W53-7"

Từ https://en.wikipedia.org/wiki/ISO_8601#Week_dates (đậm stylin g thêm)

+0

Cảm ơn .. bạn cũng giải quyết vấn đề của tôi .. :) – Mani

+2

Cảm ơn, tôi đã phát điên vì vấn đề này trong một thời gian dài .. Cảm ơn rất nhiều –

+2

Tôi nghĩ rằng có một yếu tố không suy nghĩ trong việc thiết kế một trình định dạng sử dụng YYYY để định dạng một năm "có thể không phải lúc nào cũng có cùng giá trị với năm dương lịch". Chẳng phải 'QQQQ' hoặc 'XXXX' (ví dụ) có phải là lựa chọn ít bị lỗi hơn không? "Giá trị nhớ" không thực sự có vẻ như là thứ ưu tiên ở đây. – Spike0xff

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