Преобразовать NSString во время, а затем вычислить «Время до» - PullRequest
2 голосов
/ 12 ноября 2011

Я уже некоторое время нахожусь на SO, пытаясь решить эту проблему, но мне не повезло.

В двух словах я хочу взять строку, подобную этой: "2011-11-21 11:20:00" и вычислить "Time Until". В формате, подобном "1 day 36 mins", который был бы строкой, которую я мог бы отобразить в метке.

Я не могу обернуть голову вокруг этого. У кого-нибудь есть некоторый пример кода из этого? Любая помощь будет принята с благодарностью.

Ответы [ 3 ]

3 голосов
/ 12 ноября 2011

@ Maudicus находится на правильном пути, но в его ответе есть некоторые недостатки.

  1. Формат даты, который вам нужно использовать: @"yyyy-MM-dd HH:mm:ss"
  2. Когда у вас есть дата, вы должны использовать -[NSCalendar components:fromDate:toDate:options:], чтобы выяснить разницу между одной датой и другой. Например:

    NSDate *date = ...; // the date converted using the date formatter
    NSDate *target = [NSDate date]; // now
    NSCalendar *calendar = [NSCalendar currentCalendar];
    NSUInteger components = NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;
    NSDateComponents *difference = [calendar components:components fromDate:date toDate:target options:0];
    
    NSLog(@"difference: %d days, %d hours, %d minutes, %d seconds", [difference days], [difference hours], [difference minutes], [difference seconds]);
    
2 голосов
/ 12 ноября 2011

Этот код должен вам помочь.

    NSDate * date;

    //Assume dateString is populated and of format NSString * dateString =@"2011-11-21 11:20:00";
    NSDateFormatter * dateFormatter = [[NSDateFormatter alloc] init];

    //EDITED date formatter to correct behavior
    [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
    if (dateString != nil)  {
        date = [dateFormatter dateFromString:dateString];
    }
    [dateFormatter release];

    NSTimeInterval difference = [date timeIntervalSinceDate:[NSDate date]];
    int days = difference/(3600*24);
    difference -= (float) (days*3600*24);
    int hours = difference/(3600);
    difference -= (float) (hours*3600);
    int minutes = difference/(60);

    NSString * timeRemaining = [NSString stringWithFormat:@"%dd %dh %dm", days, hours, minutes];
1 голос
/ 16 июля 2013
duration.text = [NSString stringWithFormat:@"%d:%02d", (int)audioPlayer.duration / 3600, (int)audioPlayer.duration % 60, nil];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...