2013-06-13 38 views

Trả lời

34

Bạn cần thu thập các thành phần ngày tháng và sửa đổi các thuộc tính bắt buộc.

//gather current calendar 
NSCalendar *calendar = [NSCalendar currentCalendar]; 

//gather date components from date 
NSDateComponents *dateComponents = [calendar components:(NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond) fromDate:[NSDate date]]; 

//set date components 
[dateComponents setDay:17]; 
[dateComponents setMonth:5]; 
[dateComponents setYear:2013]; 

//save date relative from date 
NSDate *date = [calendar dateFromComponents:dateComponents]; 

Dù rằng, hoặc bạn có thể thêm số giây trong 1 ngày để tăng giá trị:

NSDate *date = [NSDate dateWithTimeInterval:((60 * 60) * 24) sinceDate:[NSDate date]]; 
+0

Thêm số giây trong 1 ngày giả định rằng tất cả các ngày đều có cùng số giây. Nhưng điều này sẽ phá vỡ cho một bước nhảy vọt thứ hai: https: //en.wikipedia.org/wiki/Leap_second –

+0

NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit không được chấp nhận. Sử dụng: (NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond) để thay thế. – Niraj

0

Bạn cần tìm sốOfSeconds của ngày hôm nay lúc 0 giờ sáng và số ngày khácOfSeconds lúc 0 giờ sáng. Tìm sự khác biệt giữa chúng. Sau đó, để numberOfSeconds của 2013-05-17 15:00:12 +0000 thêm sự khác biệt này.

0

Tại sao bạn không thể thay đổi ngày bắt đầu với ngày và giờ hiện tại bạn muốn sử dụng API dateWithString. Nếu không thì bạn có thể xem API dateByAddingTimeInterval của NSDate bằng cách lấy thời gian khác nhau giữa hai NSDate

2

Hoặc trong nhanh chóng:

let calendar = NSCalendar.currentCalendar() 
    let components = calendar.components([NSCalendarUnit.Year, NSCalendarUnit.Month, NSCalendarUnit.Day], fromDate: NSDate.init()) 
    components.day = 17 
    components.month = 5 
    components.year = 2013 

    let date = calendar.dateFromComponents(components) 
0

Swift 3.0
Ngày nhận có Năm, Tháng & Ngày -5 từ Ngày hiện tại

//CurrentDate 
    let currentDate = Date() 

    let gregorianCalendar = Calendar(identifier: .gregorian) 
    var components = gregorianCalendar.dateComponents([.year, .month, .day], from: currentDate) 

    // Change int value which you want to minus from current Date. 
    components.day = components.day!-5 
    components.month = components.month!-5 
    components.year = components.year!-5 

    let date = gregorianCalendar.date(from: components)! 
    print("Current Date = \(currentDate)") 
    print("Old Date = \(date)") 

Swift 2,0

//CurrentDate 
    let currentDate = NSDate() 

    let gregorianCalendar = NSCalendar(identifier: .gregorian) 
    var components = gregorianCalendar.dateComponents([.year, .month, .day], from: currentDate) 

    // Change int value which you want to minus from current Date. 
    components.day = components.day!-5 
    components.month = components.month!-5 
    components.year = components.year!-5 

    let date = gregorianCalendar.date(from: components)! 
    print("Current Date = \(currentDate)") 
    print("Old Date = \(date)") 
2

Đọc thêm trên blog của tôi https://github.com/onmyway133/blog/issues/54

Hôm nay tôi đang cố gắng để thay đổi năm của một đối tượng Date đến 2000 trong Swift.

let date = Date() 

Đầu tiên, tôi thử với date(bySetting:) nhưng nó không hoạt động với năm ngoái. Nó chỉ đơn giản trả về nil

Calendar.current.date(bySetting: .year, value: 2000, of: date) 

Thứ hai, tôi đã thử với dateComponents. component.year đã thay đổi, nhưng lịch vẫn trả về ngày ban đầu, rất lạ !!. Không có vấn đề gì múi giờ và lịch tôi sử dụng, nó vẫn có vấn đề này

var component = calendar.dateComponents(in: TimeZone.current, from: base) 
component.year = year 
Calendar.current.date(from: component) 

Cuối cùng, tôi đã cố gắng để được rõ ràng hơn, và nó hoạt động

var component = calendar.dateComponents([.year, .month, .day, .hour, .minute, .second], from: base) 
component.year = year 
Calendar.current.date(from: component) 
+0

Mã này trả về nil cho tôi mỗi lần –

+1

@WilliamT. Xin chào, tôi đã cập nhật câu trả lời của mình, vui lòng xem – onmyway133

4

Swift 3 & IOS 10,2

let calendar = Calendar.current 

    var dateComponents: DateComponents? = calendar.dateComponents([.hour, .minute, .second], from: Date()) 

    dateComponents?.day = 17 
    dateComponents?.month = 5 
    dateComponents?.year = 2013 

    let date: Date? = calendar.date(from: dateComponents!) 
    print(date!) 

Swift 3 & IOS 10.2

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