[objective-c] NSDate에 하루를 어떻게 추가합니까?

제목에서 알 수 있듯이 기본적으로 에 1 일을 추가 할 수있는 방법이 궁금합니다 NSDate.

만약 그렇다면 :

21st February 2011

그것은 될 것입니다 :

22nd February 2011

또는 다음과 같은 경우 :

31st December 2011

그것은 될 것입니다 :

1st January 2012.



답변

스위프트 5.0 :

var dayComponent    = DateComponents()
dayComponent.day    = 1 // For removing one day (yesterday): -1
let theCalendar     = Calendar.current
let nextDate        = theCalendar.date(byAdding: dayComponent, to: Date())
print("nextDate : \(nextDate)")

목표 C :

NSDateComponents *dayComponent = [[NSDateComponents alloc] init];
dayComponent.day = 1;

NSCalendar *theCalendar = [NSCalendar currentCalendar];
NSDate *nextDate = [theCalendar dateByAddingComponents:dayComponent toDate:[NSDate date] options:0];

NSLog(@"nextDate: %@ ...", nextDate);

이것은 설명이 필요합니다.


답변

iOS 8부터 사용할 수 있습니다 NSCalendar.dateByAddingUnit

Swift 1.x의 예 :

let today = NSDate()
let tomorrow = NSCalendar.currentCalendar()
    .dateByAddingUnit(
         .CalendarUnitDay,
         value: 1,
         toDate: today,
         options: NSCalendarOptions(0)
    )

스위프트 2.0 :

let today = NSDate()
let tomorrow = NSCalendar.currentCalendar()
    .dateByAddingUnit(
        .Day,
        value: 1,
        toDate: today,
        options: []
    )

스위프트 3.0 :

let today = Date()
let tomorrow = Calendar.current.date(byAdding: .day, value: 1, to: today)


답변

스위프트 5 업데이트

let today = Date()
let nextDate = Calendar.current.date(byAdding: .day, value: 1, to: today)

목표 C

 NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
 // now build a NSDate object for the next day
 NSDateComponents *offsetComponents = [[NSDateComponents alloc] init];
 [offsetComponents setDay:1];
 NSDate *nextDate = [gregorian dateByAddingComponents:offsetComponents toDate: [NSDate date] options:0];


답변

iOS 8 이상, OSX 10.9 이상, Objective-C

NSCalendar *cal = [NSCalendar currentCalendar];
NSDate *tomorrow = [cal dateByAddingUnit:NSCalendarUnitDay
                                   value:1
                                  toDate:[NSDate date]
                                 options:0];


답변

highmaintenance의 답변과 vikingosegundo의 의견을 기반으로 작동하는 Swift 3 이상 구현 . 이 날짜 확장에는 연도, 월 및 시간을 변경하는 추가 옵션도 있습니다.

extension Date {

    /// Returns a Date with the specified amount of components added to the one it is called with
    func add(years: Int = 0, months: Int = 0, days: Int = 0, hours: Int = 0, minutes: Int = 0, seconds: Int = 0) -> Date? {
        let components = DateComponents(year: years, month: months, day: days, hour: hours, minute: minutes, second: seconds)
        return Calendar.current.date(byAdding: components, to: self)
    }

    /// Returns a Date with the specified amount of components subtracted from the one it is called with
    func subtract(years: Int = 0, months: Int = 0, days: Int = 0, hours: Int = 0, minutes: Int = 0, seconds: Int = 0) -> Date? {
        return add(years: -years, months: -months, days: -days, hours: -hours, minutes: -minutes, seconds: -seconds)
    }

}

OP의 요청에 따라 하루를 추가하는 용도는 다음과 같습니다.

let today = Date() // date is then today for this example
let tomorrow = today.add(days: 1)


답변

스위프트 4.0 (의 스위프트 3.0와 같은 이 멋진 대답은 그냥 나 같은 신인에 대한 취소하고)

let today = Date()
let yesterday = Calendar.current.date(byAdding: .day, value: -1, to: today)


답변

아래 함수를 사용하고 days 매개 변수를 사용하여 days daysAhead / daysBehind 매개 변수를 사용하여 미래 날짜에 대해 양수 또는 이전 날짜에 대해 음수로 매개 변수를 전달하십시오.

+ (NSDate *) getDate:(NSDate *)fromDate daysAhead:(NSUInteger)days
{
    NSDateComponents *dateComponents = [[NSDateComponents alloc] init];
    dateComponents.day = days;
    NSCalendar *calendar = [NSCalendar currentCalendar];
    NSDate *previousDate = [calendar dateByAddingComponents:dateComponents
                                                     toDate:fromDate
                                                    options:0];
    [dateComponents release];
    return previousDate;
}