2010-02-24 42 views
6

Tôi có số NSDate và thời lượng. Tôi cần phải có thời gian sau khi thời gianCách thêm khoảng thời gian vào một NSDate?

Given:
Ngày là "2010/02/24 12:30:00 -1000"
thời gian là 3600 giây

tôi cần để có được "2010 -02-24 13:30:00 -1000 "

Tôi nghĩ dateWithTimeIntervalSinceReferenceDate:, sẽ thực hiện thủ thuật nhưng bây giờ tôi thấy rằng điều này cho phép thay đổi ngày từ ngày 1 tháng 1 năm 2001 GMT.

Có một chức năng C tôi cần phải sử dụng

Trả lời

31

Vì trạng thái DyingCactus, bạn có thể sử dụng phương thức addTimeInterval của NSDate, nhưng tùy thuộc vào phiên bản hệ điều hành sẽ tạo cảnh báo trình biên dịch vì nó không được dùng nữa trong 10.6 như 2009-08-17.

Các khuyến cáo phương pháp hiện nay là sử dụng dateByAddingTimeInterval trên NSDate:

NSDate *newDate = [oldDate dateByAddingTimeInterval:3600]; 

Lưu ý rằng nếu bạn đang nhắm mục tiêu 10,5 hoặc sớm hơn, câu trả lời ban đầu sẽ làm việc.

+0

Nhờ tất cả những ai đã trả lời. Tôi đã không đọc các tài liệu cũng đủ về tài liệu này. – user278859

4

Bạn muốn phương pháp lớp dateWithTimeInterval:sinceDate: mà mất ngày bắt đầu và khoảng thời gian NSDate docs

+0

tôi không thể tìm dateWithTimeInterval: sinceDate, nhưng bây giờ mà bạn làm cho tôi nhìn lại tôi thấy initWithTimeInterval: sinceDate :. Điều đó đã làm các trick. Cảm ơn. – user278859

+0

'dateWithTimeInterval: sinceDate' là một phương thức lớp, chứ không phải là một phương thức thể hiện, trả về kết quả là một NSDate tự động phát hành. Bạn đã quen với các quy ước đặt tên cuối cùng. – Abizern

+0

OK, tôi hiểu tại sao tôi không thấy dateWithTimeIntervalSinceDate. Liên kết của bạn đến Thư viện Tham khảo Mac OSX. Nó không có sẵn cho iPhone. Nhưng như những người khác đã chỉ ra có một số cách khác để làm điều đó có sẵn trên iPhone. – user278859

3

Bạn có thể sử dụng phương pháp dụ addTimeInterval của NSDate:

NSDate *newDate = [oldDate addTimeInterval:3600]; 

Chỉnh sửa: Vì Chip Coons đã chỉ ra chính xác, phương pháp này đã không được chấp nhận. Thay vào đó, hãy sử dụng một trong các phương pháp khác.

0

Thay vì sử dụng phương thức addTimeInterval không được chấp nhận, bạn có thể sử dụng phương thức thể hiện dateByAddingTimeInterval mới hơn của NSDate.

NSDate *newDate = [oldDate dateByAddingTimeInterval:2500]; 
1

Đối với những người tìm kiếm một phiên bản 3.x Swift:

let newDate = Date.init(timeInterval: 2600, since: oldDate) 
Các vấn đề liên quan