Как можно вычесть часы из NSDate? - PullRequest
29 голосов
/ 21 июля 2009

Я бы хотел вычесть 4 часа из даты. Я прочитал строку даты в объект NSDate, используя следующий код:

NSDateFormatter * dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZ"];
NSDate * mydate = [dateFormatter dateFromString:[dict objectForKey:@"published"]];

Что мне делать дальше?

Ответы [ 7 ]

49 голосов
/ 21 июля 2009
NSDate *newDate = [theDate dateByAddingTimeInterval:-3600*4];

Ссылка на документацию .


NSDate *newDate = [[[NSDate alloc] initWithTimeInterval:-3600*4
                                              sinceDate:theDate]] autorelease];

Ссылка на документацию .

23 голосов
/ 21 июля 2009

NSCalendar - это общий API-интерфейс для изменения дат на основе единиц человеческого времени. Для этого вы можете использовать NSCalendar -dateByAddingComponents:toDate:options: с отрицательным числом часов.

6 голосов
/ 10 мая 2015

Начиная с iOS 8 есть более удобная dateByAddingUnit:

Swift 2.x

//subtract 3 hours
let calendar = NSCalendar.autoupdatingCurrentCalendar()
newDate = calendar.dateByAddingUnit(.Hour, value: -3, toDate: originalDate, options: [])
5 голосов
/ 09 декабря 2016
//in Swift 3
//subtract 3 hours
let calendar = NSCalendar.autoupdatingCurrent
newDate = calendar.date(byAdding:.hour, value: -3, to: originalDate)
2 голосов
/ 15 мая 2018

В Swift 4:

var baseDate = ... // something
let dateMinus4Hours = Calendar.current.date(byAdding: .hour, value: -4, to: baseDate)

не идите с 24*3600 и прочим, это напрашивается на неприятности.

1 голос
/ 04 мая 2018

Здесь функция, которая может быть полезна, так как возвращает дату -4 ч, учитывая, что это также может изменить дату, месяц и, в конечном итоге, год. Опция .searchBackward является важной частью:)

public static func correctSecondComponent(date: Date, calendar: Calendar = Calendar(identifier: Calendar.Identifier.gregorian))->Date {

    let hour = calendar.component(.hour, from: date)

    let e = (calendar as NSCalendar).date(byAdding: NSCalendar.Unit.hour, value: -4, to: date, options:.searchBackwards)!

    return e
}
1 голос
/ 06 августа 2009

Функция dateFromString возвращает NSDate, а не NSString. ты должен измениться,

NSDate * theDate = [dateFormatter dateFromString: datetemp];

...