Время от TextView до NSDate

Я создаю приложение для iPhone, чтобы взять время: автомобиль должен получить в определенное время в какой-то момент, поэтому, если автомобиль рано или поздно получает очки.

Мне нужно получить самые точные сроки, как я могу, поэтому я хочу использовать миллисекунды, но, как далеко, результаты разочаровывают.

Время набирается на TextField, скажем 12:17:22 , и код выглядит следующим образом:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
[dateFormatter setTimeZone:[NSTimeZone localTimeZone]];
 [dateFormatter setDateFormat:@"HH:mm:ss"];

timeLegStart = [NSDate new];  
timeLegStart = [dateFormatter dateFromString:setStartTime.text];

NSLog(@"timeLegStart = %@",timeLegStart);

Вывод 1970-01-01 11:17:22 +0000 , и я хотел бы, чтобы это было 12: 17: 22: 000

Заранее спасибо !

0
Вы получаете дату в GMT, а не по местному времени. Вам нужно установить временную шкалу вашей даты или форматирования, я забываю, что именно.
добавлено автор nielsbot, источник
О, ты так делаешь! Но я все еще думаю, что это вопрос часового пояса, поэтому в этом случае это неправильно.
добавлено автор nielsbot, источник
Попробуйте удалить timeLegStart = [NSDate new]; и проверить.
добавлено автор HRM, источник
@Jeremy, строка - «setStartTime.text», и мне нужно, чтобы она была NSDate для вычисления NSTimeInterval.
добавлено автор Luis, источник

3 ответы

Проблема заключается в том, что NSDate содержит дату и время, и они не доступны отдельно. Когда вы даете входную дату со спецификациями времени, она загружает значения даты начала календаря с предоставленным временем и создает дату. date как выход. На самом деле нет проблем с этим.

Вы можете использовать тот же форматтер, чтобы вернуть время назад

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
[dateFormatter setTimeZone:[NSTimeZone localTimeZone]];
[dateFormatter setDateFormat:@"HH:mm:ss"];
NSDate* timeLegStart = [NSDate new];
timeLegStart = [dateFormatter dateFromString:@"12:12:12"];
NSLog(@"timeLegStart = %@",[dateFormatter stringFromDate:timeLegStart]);

и это даст вам

timeLegStart = 12:12:12

EDIT: при регистрации NSDate он будет только в формате GMT. Поскольку вы устанавливаете часовой пояс на локальный, дата всегда будет отображаться так же, как и у вас.

  NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
    [dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
    [dateFormatter setDateFormat:@"HH:mm:ss"];
    NSDate* timeLegStart = [NSDate new];
    timeLegStart = [dateFormatter dateFromString:@"12:12:12"];
    NSLog(@"timeLegStart = %@",timeLegStart);

дам тебе

 2000-01-01 12:12:12 +0000

Счастливое кодирование :)

0
добавлено
Вы уверены, что он не работает? Потому что я работаю в новом проекте.
добавлено автор Lithu T.V, источник
@Luis: Я тебя не понял. вы хотите, чтобы сегодня даты со строкой, которую вы вводили в качестве времени?
добавлено автор Lithu T.V, источник
Извините, это не сработает. Во всяком случае, мне нужно NSDate для вычисления NSTimeInterval.
добавлено автор Luis, источник
Это то, что я тоже получаю; Я хотел работать только раз, а не даты; но я думаю, что это действительно не имеет значения, чтобы получить TimeIntervals, если я использую время и даты. Я имею в виду, что время разницы будет одинаковым от time1 = 12:22:23 до time2 = 12:22:24 как time1 = 2013-02- 08 12:22:23 +0000 до time2 = 2013-02-08 12:22:24 +0000 , не так ли? Но мне еще нужно отформатировать время на использование миллисекунд. Ура!
добавлено автор Luis, источник

Задайте свойства NSDateFormatter следующим образом (заменив информацию о часовом поясе):

NSDateFormatter * dateFormatter = [[NSDateFormatter alloc] init];
NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"pt_BR"];
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"America/Sao_Paulo"]];
[dateFormatter setDateFormat:@"HH':'mm':'ss' 'z"];
[dateFormatter setLocale:locale];
0
добавлено

Хорошо, я разобрал это так:

- (void)fijaTiempoInicio
    {
    //getting current day
    NSDateComponents *dateComponents = [[NSCalendar currentCalendar] components:~ NSTimeZoneCalendarUnit fromDate:[NSDate date]];
     [dateComponents setTimeZone:[NSTimeZone timeZoneWithName:@"Europe/Spain"]];
    NSDate *currentDate = [[NSCalendar currentCalendar] dateFromComponents:dateComponents];

    //extracting year, month and day from current date
    NSDateFormatter *df = [[NSDateFormatter alloc]init];
    [df setDateFormat:@"dd"];
    NSString *currentDayString = [NSString stringWithFormat:@"%@",[df stringFromDate:currentDate]];

    [df setDateFormat:@"MM"];
    NSString *currentMonthString = [NSString stringWithFormat:@"%@",[df stringFromDate:currentDate]];

    [df setDateFormat:@"yyyy"];
    NSString *currentYearString = [NSString stringWithFormat:@"%@", [df stringFromDate:currentDate]];

    NSDateFormatter *ft = [[NSDateFormatter alloc]init];

    [ft setTimeZone:[NSTimeZone localTimeZone]];
    [ft setDateFormat:@"yyyy-MM-dd HH:mm:ss"];

    NSString *tempDate = [NSString stringWithFormat:@"%@-%@-%@ %@",currentYearString,currentMonthString,currentDayString,txtTiempoInicioTramo.text];
NSLog(@"tempDate= %@",tempDate);

    startTime = [ft dateFromString:tempDate];
    NSLog(@"startTime= %@",startTime);

Затем, метод anothe вычисляет разницу между двумя NSDates, которая представляет собой показатель в миллисекундах - float

- (IBAction)btnCapturarTiempo:(id)sender 
    {

    NSDateFormatter *formatCarTime = [[NSDateFormatter alloc]init];
    [formatCarTime setDateFormat:@"HH:mm:ss"];
    [formatCarTime setTimeZone:[NSTimeZone timeZoneWithName:@"Europe/Madrid"]];

    carTime =  [NSDate date];
    difference = [carTime timeIntervalSinceDate:startTime];
    labelTiempoCoche.text = [NSString stringWithFormat:@"%f",difference];

Спасибо всем за ваше время и предложения. Луис

0
добавлено