iphone - sumar - ¿Cómo se puede restar horas de un NSDate?
suma y resta de horas minutos y segundos en excel (7)
Aquí una función que podría ser útil ya que devuelve la fecha -4 h considerando que esto también puede cambiar la fecha y el mes y eventualmente el año. La opción .searchBackward es la parte importante :)
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
}
Me gustaría restar 4 horas de una fecha. Leí la cadena de fecha en un objeto NSDate usando el siguiente código:
NSDateFormatter * dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setDateFormat:@"yyyy-MM-dd''T''HH:mm:ssZ"];
NSDate * mydate = [dateFormatter dateFromString:[dict objectForKey:@"published"]];
¿Que hago después?
Desde iOS 8 hay una dateByAddingUnit
más conveniente:
Swift 2.x
//subtract 3 hours
let calendar = NSCalendar.autoupdatingCurrentCalendar()
newDate = calendar.dateByAddingUnit(.Hour, value: -3, toDate: originalDate, options: [])
En Swift 4:
var baseDate = ... // something
let dateMinus4Hours = Calendar.current.date(byAdding: .hour, value: -4, to: baseDate)
No vayas con 24*3600
y esas cosas, eso es un problema.
La función dateFromString devuelve NSDate, no NSString. usted debe cambiar,
NSDate * theDate = [dateFormatter dateFromString: datetemp];
NSCalendar es la API general para cambiar fechas en función de las unidades de tiempo humanas. Para esto, puede usar NSCalendar''s -dateByAddingComponents:toDate:options:
con un número negativo de horas.
//in Swift 3
//subtract 3 hours
let calendar = NSCalendar.autoupdatingCurrent
newDate = calendar.date(byAdding:.hour, value: -3, to: originalDate)
NSDate *newDate = [theDate dateByAddingTimeInterval:-3600*4];
NSDate *newDate = [[[NSDate alloc] initWithTimeInterval:-3600*4
sinceDate:theDate]] autorelease];