ho i dati nel formatoArrotondamento di NSDate in ora più vicino in iOS
tempo: 13:52, 10:30, 11:48
ecc
Vorrei arrotondare al ora più vicina
come per 13:52 -> 14:00, 10:30 -> 11:00 e 11:48 -> 12:00.
Come posso farlo con NSDate?
ho i dati nel formatoArrotondamento di NSDate in ora più vicino in iOS
tempo: 13:52, 10:30, 11:48
ecc
Vorrei arrotondare al ora più vicina
come per 13:52 -> 14:00, 10:30 -> 11:00 e 11:48 -> 12:00.
Come posso farlo con NSDate?
Utilizzare questo metodo
- (NSDate*) nextHourDate:(NSDate*)inDate{
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *comps = [calendar components: NSEraCalendarUnit|NSYearCalendarUnit| NSMonthCalendarUnit|NSDayCalendarUnit|NSHourCalendarUnit fromDate: inDate];
[comps setHour: [comps hour]+1]; //NSDateComponents handles rolling over between days, months, years, etc
return [calendar dateFromComponents:comps];
}
Questo vi darà la data di prossima ora per l'Indate
Hey Ciao @Lithu Tv, sto impostando il fuso orario su UTC, se uso il tuo codice, Se l'ora del sistema (Indian Time) è alle 18.10, sto ricevendo le 19.30 pm, Analogamente cambio il fuso orario negli Stati Uniti su dispositivo sotto le impostazioni e quindi provare e se il tempo è 8.20 del mattino ottengo 9.00. Non capisco perché? – Ranjit
Questa è più di una funzione ceil. Se hai 10:15, non sarà arrotondato a 10. Invece cambierà in 11:15. –
Utilizzare il codice riportato di seguito. Deve aiutare per te.
NSString *[email protected]"17:15";
NSArray *strings = [dateString componentsSeparatedByString:@":"];
int firstPart=[[NSString stringWithFormat:@"%@",strings[0]] intValue];
int lastPart=[[NSString stringWithFormat:@"%@",strings[1]] intValue];
NSLog(@"LAST:%d",firstPart);
if (lastPart>0) {
int output=firstPart+1;
NSString *finalOutput=[NSString stringWithFormat:@"%d:00",output];
NSLog(@"OUTPUT:%@",finalOutput);
}
else
{
NSLog(@"OUTPUT:%@",dateString);
}
È funzionante. Grazie mille – chandrika
func nextHourDate() -> NSDate? {
let calendar = NSCalendar.currentCalendar()
let date = NSDate()
var minuteComponent = calendar.components(NSCalendarUnit.MinuteCalendarUnit, fromDate: date)
let components = NSDateComponents()
components.minute = 60 - minuteComponent.minute
return calendar.dateByAddingComponents(components, toDate: date, options: nil)
}
Ecco un'implementazione Swift 3.0 che ottiene l'ora più vicino, utilizzando un Date
estensione:
extension Date {
func nearestHour() -> Date? {
var components = NSCalendar.current.dateComponents([.minute], from: self)
let minute = components.minute ?? 0
components.minute = minute >= 30 ? 60 - minute : -minute
return Calendar.current.date(byAdding: components, to: self)
}
}
Hai anche bisogno di rimuovere i secondi? – chowey
Come hai provato a farlo? – Wain
1. Dividi l'NSDate in componenti 2. Aggiungi if-else e controlla se i minuti sono superiori a 30 3. Azzera i minuti e aumenta le ore di uno o non fare nulla. Questo è tutto. Semplice matematica :-) – Oleg