8
votes

Faire une nouvelle nsdate en combinant deux nsdates

J'ai nsdate * jour1 et nsdate * jour2 . Comment puis-je créer un nsdate * jour3 en copiant uniquement l'année / mois / jour de la journée1 et heure / minute / seconde du jour2?


0 commentaires

5 Réponses :


0
votes

Vous devez créer un NSCalendar, puis obtenir les composants de la date des première et seconde dates, puis obtenir la date à l'aide des nouveaux composants de la date du NSCalendar.

Utilisez les méthodes NSCalendar P>

NSUInteger unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit |NSSecondCalendarUnit; 


0 commentaires

17
votes
unsigned unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit |  NSDayCalendarUnit;
NSDateComponents *comps = [[NSCalendar currentCalendar] components:unitFlags fromDate:day1];
NSDate *day3 = [[NSCalendar currentCalendar] dateFromComponents:comps];

unitFlags = NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;
comps = [[NSCalendar currentCalendar] components:unitFlags fromDate:day2];
day3 = [[NSCalendar currentCalendar] dateByAddingComponents:comps toDate:day3 options:0];
Sources:
NSDateComponents Class Reference
NSCalendar Class Reference

1 commentaires

Pour éviter les problèmes d'été, je vous recommande de définir le CurrentCalendar à UTC Timezone.



1
votes

Ce n'est pas aussi compact que Darvids0n, mais cela fonctionne.

NSDateFormatter *tempFormatter = [[[NSDateFormatter alloc]init]autorelease];
[tempFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSString* message = [NSString stringWithFormat:@"%04d-%02d-%02d %02d:%02d:%02d", year, month, day, hour, minute, second];
NSDate *day3 = [tempFormatter dateFromString:message];


0 commentaires

0
votes

Pour les enregistrements, voici une approche plus générale

NSDate *day3 = 
    [day2 dateByTakingComponents: NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit
                        fromDate: day1];


0 commentaires

0
votes

Mise à jour SWIFT 4 & 4.1 STRAR>

 func combineDateAndTimeToOneDateForAPI() {

    let datefrmter = DateFormatter()
    datefrmter.dateFormat = "dd/MM/yyyy"
    let dateFromString = datefrmter.date(from: lblDate.text!)

    datefrmter.dateFormat = "h:mm a"
    let timeFromString = datefrmter.date(from: lblTime.text!)

    let calendar = NSCalendar.current

    let componentsOne = calendar.dateComponents([.year,.month,.day], from: dateFromString!)
    let componentsTwo = calendar.dateComponents([.hour,.minute,.second,.nanosecond], from: timeFromString!)

    let totalComponents = NSDateComponents()
    totalComponents.year = componentsOne.year!
    totalComponents.month = componentsOne.month!
    totalComponents.day = componentsOne.day!
    totalComponents.hour = componentsTwo.hour!
    totalComponents.minute = componentsTwo.minute!
    totalComponents.second = componentsTwo.second!
    totalComponents.nanosecond = componentsTwo.nanosecond!

    let finalDate = calendar.date(from: totalComponents as DateComponents)
    print(finalDate)

}


0 commentaires