2013-06-13 5 views

ответ

34

Вам нужно собрать компоненты даты и внести необходимые изменения.

//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]; 

Либо так, либо вы можете добавить количество секунд, в течение 1 дня для увеличения значения:

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

Добавление количества секунд за 1 день предполагает, что все дни имеют одинаковое количество секунд. Но это сломается на секунду: https: //en.wikipedia.org/wiki/Leap_second –

+0

NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit устарели. Использование: (NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond). – Niraj

0

Вам необходимо найти номерОфис сегодняшнего дня в 0 утра и другое число днейОбсекунды в 0 утра. Найдите разницу между ними. Затем к numberOfSeconds 2013-05-17 15:00:12 +0000 добавьте эту разницу.

0

Почему вы не можете просто изменить дату начала с указанием текущей даты и времени, используя API dateWithString. Если нет, то вы, вероятно, можете посмотреть и на dateByAddingTimeInterval API NSDate, взяв diff timeinterval между двумя NSDate

2

Или в скор:

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
Дата-дата, которая имеет год, месяц & День -5 с текущей даты

//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

Читайте больше на моем блоге https://github.com/onmyway133/blog/issues/54

Сегодня я пытаюсь изменить год объекта Date 2000 в Swift.

let date = Date() 

Во-первых, я попытался с date(bySetting:), но он не работает с прошлого года. Он просто возвращает ноль

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

Во-вторых, я попытался с dateComponents. component.year изменился, но календарь по-прежнему возвращает исходную дату, очень странно !!. Независимо от того, что часовой пояс и календарь я использую, она до сих пор не имеет этой проблемы

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

Наконец, я пытался быть более явным, и она работает

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

Этот код возвращает nil для меня каждый раз –

+1

@WilliamT. Привет, я обновил свой ответ, пожалуйста, взгляните – 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!) 

Свифт 3 & IOS 10.2

Смежные вопросы