我想从约会中减去4个小时。我将日期字符串读入NSDate对象,使用以下代码:
NSDateFormatter * dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZ"];
NSDate * mydate = [dateFormatter dateFromString:[dict objectForKey:@"published"]];
接下来我该怎么做?
答案 0 :(得分:48)
NSDate *newDate = [theDate dateByAddingTimeInterval:-3600*4];
NSDate *newDate = [[[NSDate alloc] initWithTimeInterval:-3600*4
sinceDate:theDate]] autorelease];
答案 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
}