2010-09-07 55 views
15

Tôi cần đặt NSDate thành ngày, giờ và múi giờ cụ thể cho Ứng dụng iPhone.Đặt NSDate thành ngày, giờ và múi giờ cụ thể

Mã ví dụ bên dưới hoạt động tốt trên iOS 4 khi setTimeZone được giới thiệu với iOS 4. Làm thế nào tôi có thể dễ dàng đặt NSDate thành ngày, giờ và múi giờ mà không sử dụng setTimeZone để nó có thể được sử dụng trên các thiết bị iOS 3.0?

NSDateComponents *comps = [[NSDateComponents alloc] init]; 
[comps setYear:2010]; 
[comps setMonth:8]; 
[comps setDay:24]; 
[comps setHour:17]; 
[comps setMinute:5]; 
[comps setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"] ]; 

NSCalendar *cal = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
NSDate *referenceTime = [cal dateFromComponents:comps]; 

Guess này nên đơn giản, nhưng bằng cách nào đó NSDate, linh kiện và lịch và tôi không phải là những người bạn tốt ...

Trả lời

3

Tôi tự hỏi bạn có thể đặt múi giờ trên đối tượng NSCalendar mà bạn sử dụng để tạo NSDate từ số NSDateComponents hay không. Tôi đã không thử điều này và không biết nếu nó sẽ làm việc, nhưng nó có thể có giá trị một thử.

+0

Cảm ơn! Tôi vừa xóa setTimeZone cho các comp và thêm một cho cal, [cal setTimeZone: [NSTimeZone timeZoneWithAbbreviation: @ "UTC"]]; và nó hoạt động tốt cho tôi kết quả tương tự. Tuyệt quá! – Structurer

3

NDates đã có khái niệm về múi giờ trong và của chính họ. Chúng cơ bản là giây kể từ một ngày tùy ý nhất định vào giờ GMT. Như vậy, bạn không thể cung cấp cho họ một múi giờ. Nếu múi giờ quan trọng, bạn sẽ cần phải theo dõi cả thời gian và múi giờ.

+0

Cảm ơn Ben vì câu trả lời của bạn. Những gì tôi đã làm để kiểm tra giả thuyết của bạn là để loại bỏ các dòng với setTimeZone. Khi tôi làm tôi nhận được một kết quả khác khi sử dụng NSDate timeIntervalSinceDate cho thời gian hiện tại. Có lẽ bạn đúng rằng NSDate chính nó không quan tâm về múi giờ, nhưng thiết lập nó bằng cách sử dụng NSDateComponents cho kết quả khác nhau dựa trên nếu tôi có setTimeZone có hay không. Hy vọng điều này có ý nghĩa? – Structurer

+0

Các thành phần NSDateComponents theo dõi múi giờ ... đó là một lớp nặng hơn nhiều so với NSDate. –

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