如何从NSDate中减去小时数?

30 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"]];
Run Code Online (Sandbox Code Playgroud)

接下来我该怎么办?

Geo*_*lly 49

NSDate *newDate = [theDate dateByAddingTimeInterval:-3600*4];
Run Code Online (Sandbox Code Playgroud)

链接到文档.


NSDate *newDate = [[[NSDate alloc] initWithTimeInterval:-3600*4
                                              sinceDate:theDate]] autorelease];
Run Code Online (Sandbox Code Playgroud)

链接到文档.


Chu*_*uck 23

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

  • @norskben:该页面适用于NSCalendar**日期**.这就是它所说的不使用.它特别推荐NSCalendar作为同一注释中的替代品. (10认同)

Gui*_*ent 7

在 Swift 4 中:

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

不要去24*3600和东西,那是自找麻烦。


Ben*_*ard 6

从iOS 8开始,更方便dateByAddingUnit:

Swift 2.x

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


Nin*_*ing 5

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