如何从NSDate中减去小时数?

时间:2009-07-21 18:42:38

标签: iphone objective-c nsdate

我想从约会中减去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 个答案:

答案 0 :(得分:48)

NSDate *newDate = [theDate dateByAddingTimeInterval:-3600*4];

Link to documentation


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

Link to documentation

答案 1 :(得分:23)

NSCalendar是根据人工时间单位更改日期的通用API。为此,您可以使用负数小时的NSCalendar -dateByAddingComponents:toDate:options:

答案 2 :(得分:6)

从iOS 8开始,有更方便的dateByAddingUnit

Swift 2.x

//subtract 3 hours
let calendar = NSCalendar.autoupdatingCurrentCalendar()
newDate = calendar.dateByAddingUnit(.Hour, value: -3, toDate: originalDate, options: [])

答案 3 :(得分:5)

//in Swift 3
//subtract 3 hours
let calendar = NSCalendar.autoupdatingCurrent
newDate = calendar.date(byAdding:.hour, value: -3, to: originalDate)

答案 4 :(得分:2)

在Swift 4中:

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

请不要使用24*3600和那些要求麻烦的东西。

答案 5 :(得分:1)

dateFromString函数返回NSDate,而不是NSString。 你应该改变,

  

NSDate * theDate = [dateFormatter   dateFromString:datetemp];

答案 6 :(得分:1)

这里有一个可能有用的功能,因为它可以返回日期-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
}