2011-11-07 23 views
17

tôi sử dụng những điều sau đây để có được một số tuần từ một NSDate:Cách nhận số tuần từ NSDate nhất quán trong tất cả các phiên bản iOS?

[[calendar components: NSWeekCalendarUnit fromDate:date] week] 

Thật không may, tôi nhận được giá trị khác nhau trong iOS phiên bản khác nhau. Giá trị được trả lại bởi iOS 4. * và 5 khác nhau bằng 1. Có cách nào để lấy số tuần một cách nhất quán không?

+3

Điều gì là đúng? Vui lòng bổ sung một ngày trưng bày sự cố. – zaph

+0

Tôi nghĩ mỗi ngày đều có vấn đề. Ví dụ cụ thể: ngày 6 tháng 1 năm 2011 (thứ Năm đầu tiên của năm) cho 2 là số tuần trong iOS 5, nhưng 1 trong iOS 4. Điều này cho thấy iOS 4 có thể đã sử dụng số tuần ISO, trong khi iOS 5 thì không. – hGP5b

Trả lời

-1

Đánh số tuần được chuẩn hóa theo ISO 8601.

Tôi đặt cược rằng iOS5 là chính xác và đã xảy ra lỗi cho iOS4.

Giải pháp có thể là thêm giải pháp khắc phục lỗi iOS4.

7

iOS5 dường như là sai, Bug ID # 10412573.

Tóm tắt: iOS5 NSDateComponents tuần báo cáo tuần không đúng với cả NSWeekCalendarUnit và NSWeekOfYearCalendarUnit.

Các bước để tạo:

NSCalendar *calendar = [NSCalendar currentCalendar]; 
NSDate *date = [NSDate date]; 
NSLog(@"week: %i", [[calendar components: NSWeekCalendarUnit fromDate:date] week]); 
NSLog(@"week: %i", [[calendar components: NSWeekOfYearCalendarUnit fromDate:date] weekOfYear]); 

Kết quả mong đợi: Số tuần cùng trên iOS4 và iOS5. Vào ngày 11/8/2011, tuần sẽ là 45.

Kết quả thực tế: Số tuần tương tự trên iOS5. Vào ngày 11/8/2011, tuần này phải là 46.

Hồi quy: iOS4 là chính xác, iOS5 không chính xác.

+0

Bạn có thể vui lòng cung cấp liên kết tới lỗi này không? Tôi đã thử googling và tôi cũng đã tìm kiếm cổng thông tin dành cho nhà phát triển iOS nhưng không thể tìm thấy cách để tìm báo cáo lỗi. Tôi muốn theo dõi lỗi để xem những gì Apple nói. – hGP5b

+0

Có lẽ chỉ cần sử dụng một câu lệnh if để xem nếu nó là iOS 5 và nếu nó chỉ là tack trên một tuần nữa cho đến khi lỗi được sửa. Tất nhiên mặc dù bạn phải cẩn thận mặc dù bởi vì khi họ sửa chữa nó, nó sẽ gây ra các ứng dụng có một lỗi. –

23

Kể từ khi iOS5 NSCalender dosent dường như được xác định tương ứng với ISO 8601 làm mặc định. Bạn cần đặt lịch của mình bằng phương thức "setMinimumDaysInFirstWeek" để nhận kết quả số tuần dự kiến.

[yourCalender setMinimumDaysInFirstWeek:4]; 

"4" có nghĩa là thứ năm trong trường hợp này.

http://en.wikipedia.org/wiki/ISO_week_date "Tuần đầu tiên của năm là tuần chứa thứ Năm đầu tiên của năm."

Tôi không biết tại sao nó không được định nghĩa là "4" làm mặc định trong iOS5. Chỉ là một trong những "lỗi" khủng khiếp mà tôi đoán;)

Và có, điều này sẽ hoạt động trong cả iOS 4 và 5.

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