как получить значение даты при ее создании с текущей даты

#ios #objective-c #datetime #nsdate #nsdateformatter

#iOS #objective-c #дата-время #nsdate #nsdateformatter

Вопрос:

Как преобразовать строку date @»2016-10-19T12:37:15.0896144 00:00″ в секунду / минуту / час / дни / месяцы / год.

У меня есть значение для создания даты, т. е. @»2016-10-19T12:37: 15.0896144 00: 00″

** через несколько секунд должно отображаться «50 секунд»

через несколько минут должно отображаться «40 минут»

через несколько часов необходимо показать @»20 часов»

через несколько дней нужно показать @»3 дня»

через несколько месяцев необходимо показать @»4 месяца»

через несколько лет нужно показать @»2 года»**

То, что я пробовал, у меня не работает.

 NSString* format = @"2016-10-19T12:37:15.0896144 00:00";
    // Set up an NSDateFormatter for UTC time zone
NSDateFormatter* formatterUtc = [[NSDateFormatter alloc] init];
[formatterUtc setDateFormat:format];
[formatterUtc setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
    // Cast the input string to NSDate
NSDate* utcDate = [formatterUtc dateFromString:[formatterUtc stringFromDate:timeString]];

    // Set up an NSDateFormatter for the device's local time zone
NSDateFormatter* formatterLocal = [[NSDateFormatter alloc] init];
[formatterLocal setDateFormat:format];
[formatterLocal setTimeZone:[NSTimeZone localTimeZone]];
    // Create local NSDate with time zone difference
NSDate* localDate = [formatterUtc dateFromString:[formatterLocal stringFromDate:utcDate]];
NSTimeInterval seconds = [[NSDate date] timeIntervalSinceDate:localDate];
  

Мы высоко ценим ваш вклад.

Комментарии:

1. Загляните в NSDateIntervalFormatter и NSDateComponentsFormatter .

2. Я использовал NSDateComponentsFormatter.

Ответ №1:

Используйте NSDateFormatter для преобразования ваших строк в даты. Затем используйте NSDateComponentsFormatter с maximumUnitCount значением 1 и allowedUnits для включения секунд, минут, часов, дней, месяца и года.

 NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.dateFormat = @"yyyy-MM-dd'T'HH:mm:ss.SSSSSSSZ";
dateFormatter.locale = [NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"];

NSDate *date1 = [dateFormatter dateFromString:@"2016-08-19T12:37:15.0896144 00:00"];
NSDate *date2 = [NSDate date];  // or, if date2 is also from a string, just use that dateFormatter again

NSDateComponentsFormatter *componentsFormatter = [[NSDateComponentsFormatter alloc] init];
componentsFormatter.unitsStyle = NSDateComponentsFormatterUnitsStyleFull;
componentsFormatter.allowedUnits = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond;
componentsFormatter.maximumUnitCount = 1;

NSString *string = [componentsFormatter stringFromDate:date1 toDate:date2];
  

Если вас интересуют locale настройки, смотрите Технические вопросы и ответы Apple 1480.

Комментарии:

1. Ваш отзыв отлично подходит для меня. Я получил другой уровень значений на основе моей входной строки даты.