int64_t aus vergangener Zeit erzeugen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • int64_t aus vergangener Zeit erzeugen

    Ich berechne aus zwei NSDate die vergangene Zeit mit NSDateComponents um sie als String darzustellen. Etwa so:

    Quellcode

    1. NSDate *startDate = [[timer userInfo] objectForKey:@"StartDate"];
    2. NSCalendar *sysCalendar = [NSCalendar currentCalendar];
    3. [sysCalendar setLocale:[NSLocale systemLocale]];
    4. unsigned int unitFlags = NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;
    5. NSDateComponents *conversionInfo = [sysCalendar components:unitFlags fromDate:startDate toDate:[NSDate date] options:0];
    6. [timerButton setTitle:[NSString stringWithFormat:@"%02d:%02d:%02d",
    7. [conversionInfo hour],[conversionInfo minute],[conversionInfo second]]];

    Dies würde ich nun gerne als int64_t umwandeln. Wie kann das machen? Brauche das fürs Game Center. Danke!
  • und was soll in dem drin stehen? einfach die sekunden? dann ist es ja eine einfache sache:

    int64_t sec = ([conversionInfo hour] * 60 * 60) + ([conversionInfo minute] * 60) + [conversionInfo second];

    oder eben direkt das timeinterval verwenden und den uninteressanten teil abschneiden (tage und nachkommastellen).

    du kannst aber auch zb für die uhrzeit 14:15:16 einen int haben wollen der 141516 enthällt. dann siehts halt so aus:


    int64_t sec = ([conversionInfo hour] * 10000) + ([conversionInfo minute] * 100) + [conversionInfo second];
  • Das ist aber kein int64_t. Aus der Doku zu Date and Time Programming Guide:

    Quellcode

    1. NSDate *startDate = ...;
    2. NSDate *endDate = ...;
    3. NSCalendar *gregorian = [[NSCalendar alloc]
    4. initWithCalendarIdentifier:NSGregorianCalendar];
    5. NSUInteger unitFlags = NSMonthCalendarUnit | NSDayCalendarUnit;
    6. NSDateComponents *components = [gregorian components:unitFlags
    7. fromDate:startDate
    8. toDate:endDate options:0];
    9. NSInteger months = [components month];
    10. NSInteger days = [components day];
    Alles anzeigen
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • gritsch schrieb:

    das ist dann ja nur die formatierung!?
    Im Leaderboard soll die benötigte Zeit erscheinen. Also 01:30 oder 2:45. Die NSDateComponents brauche ich nur in der App um die laufende Zeit darzustellen. Im Leaderboard habe ich den Score Type "Elapsed Time - To the second" ausgewählt. Zur Verfügung steht das Startdatum des Timers und das Datum zum Zeitpunkt des Lösens des Puzzles.
  • Ich habs mir mittlerweile anders überlegt. Am besten wäre die vergangene Zeit in Sekunden seit einem bestimmten Zeitpunkt zu berechnen * Anzahl der Fehler. Leider krieg ich die Sekunden aus dem NSTimeInterval nicht raus. Diese ganze Type Konvertierung macht mich wahnsinnig. Es muss ja ein int64_t rauskommen. Das ist die Ausgangsbasis:

    Quellcode

    1. NSTimeInterval interval = [[NSDate date] timeIntervalSinceDate:[[timer userInfo] objectForKey:@"StartDate"]];

    Irgendwelche Ideen? Das hier bringt gar nix:

    Quellcode

    1. int seconds = interval;
    2. int minutes = seconds / 60;
    3. seconds %= 60;
    4. int hours = minutes / 60;
    5. minutes %= 60;
    6. NSLog(@"seconds %i",seconds + (minutes * 60) + ((hours * 60) * 60));
  • Kay schrieb:

    gritsch schrieb:

    das ist dann ja nur die formatierung!?
    Im Leaderboard soll die benötigte Zeit erscheinen. Also 01:30 oder 2:45. Die NSDateComponents brauche ich nur in der App um die laufende Zeit darzustellen. Im Leaderboard habe ich den Score Type "Elapsed Time - To the second" ausgewählt. Zur Verfügung steht das Startdatum des Timers und das Datum zum Zeitpunkt des Lösens des Puzzles.


    In NSDate.h

    Quellcode

    1. typedef double NSTimeInterval;


    Für die Bruchteile musst Du also irgendetas mit floor() oder so machen.
    Ab den Sekunden kammst Du die Kalenderkomponenten nehemn.
    I would be embarrassed if they did not spy on me.
  • longW schrieb:

    Kay schrieb:

    gritsch schrieb:

    das ist dann ja nur die formatierung!?
    Im Leaderboard soll die benötigte Zeit erscheinen. Also 01:30 oder 2:45. Die NSDateComponents brauche ich nur in der App um die laufende Zeit darzustellen. Im Leaderboard habe ich den Score Type "Elapsed Time - To the second" ausgewählt. Zur Verfügung steht das Startdatum des Timers und das Datum zum Zeitpunkt des Lösens des Puzzles.


    In NSDate.h

    Quellcode

    1. typedef double NSTimeInterval;


    Für die Bruchteile musst Du also irgendetas mit floor() oder so machen.
    Ab den Sekunden kammst Du die Kalenderkomponenten nehemn.


    er raucht ja keine bruchteile