Получение текущего времени в строке в пользовательском формате в цели c

Я хочу текущее время в следующем формате в строке.

дд-мм-гггг ЧЧ: ММ

Как?

6.11.2009 01:50:13
4 ОТВЕТА
РЕШЕНИЕ

Вы хотите форматирование даты . Вот пример:

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"dd-MM-yyyy HH:mm"];

NSDate *currentDate = [NSDate date];
NSString *dateString = [formatter stringFromDate:currentDate];
138
28.03.2017 11:17:28
Если вы не хотите держать это вокруг; Управление памятью может или не может войти в проблему.
Carl Norum 6.11.2009 06:09:28
Форматеры даты очень медленно настраиваются. Если вы устанавливаете даты в ячейке таблицы или делаете это много, как было упомянуто выше, вы захотите сохранить ее, использовать ее для всего, а затем выпустить ее в dealloc.
Steve Weller 7.11.2009 06:08:22
@ Моше, ты пробовал читать документацию? aстрока формата для периода AM / PM. unicode.org/reports/tr35/tr35-10.html#Date_Format_Patterns
Carl Norum 26.01.2012 23:19:20
@CarlNorum Да, я сделал. Один не работает. Я собираюсь отправить вопрос через мгновение, если я не смогу заставить его работать. РЕДАКТИРОВАТЬ: Моя ошибка, я идиот.
Moshe 26.01.2012 23:23:29

Либо используйте, NSDateFormatterкак сказал Карл, либо просто используйте старый добрый strftime, что также вполне допустимо для Objective-C:

#import <time.h>
time_t currentTime = time(NULL);
struct tm timeStruct;
localtime_r(&currentTime, &timeStruct);
char buffer[20];
strftime(buffer, 20, "%d-%m-%Y %H:%M", &timeStruct);
15
6.11.2009 03:29:44
Обратите внимание, что вы не можете сделать слишком много со строкой C в Objective C. Это может быть более удобно при регистрации чего-либо на консоли. Вы можете просто сказать NSLog(@"%s", buffer).
Donovan Voss 6.11.2009 05:27:57
Все, что вы можете сделать со строкой C в C, вы можете сделать в Objective-C. То есть почти все. Следует смело использовать как строки C, так и строки NSS, и выбрать подходящую для текущего варианта использования. Я лично согласился бы с решением Карла, но важно знать, что это не единственный путь.
Stephen Canon 6.11.2009 15:28:16
Я бы сказал, что причина не использовать strftime (несмотря на то, что он генерирует строку C, которую затем нужно преобразовать) состоит в том, что вы также теряете гораздо большую гибкость параметров форматирования даты NSDateFormatter, включая более переменную длину числовых результатов и т. Д. на.
Kendall Helmstetter Gelner 6.11.2009 23:06:17
это должно быть предпочтительным способом на iOS, потому что эта ошибка стека stackoverflow.com/questions/143075/… , однако я считаю, что time () или localtime_r () не всегда точны, я вижу очень странные результаты.
valexa 12.09.2010 01:32:07

Вот простое решение:

- (NSString *)stringWithDate:(NSDate *)date
{
  return [NSDateFormatter localizedStringFromDate:date
                                        dateStyle:NSDateFormatterMediumStyle
                                        timeStyle:NSDateFormatterNoStyle];
}

Измените dateStyleи timeStyleв соответствии с вашими требованиями к форматированию.

8
10.01.2015 21:40:19
Вы не должны создать дату где-нибудь? Вы не передаете это.
Randy 10.01.2015 00:37:40
Хороший улов @Randy, только что обновил функцию для передачи dateобъекта в качестве параметра.
Zorayr 10.01.2015 21:40:52

Может быть, это будет более читабельным:

    NSDateFormatter *date = [[NSDateFormatter alloc] init];
    [date setDateFormat:@"HH:mm"];
    NSString *dateString = [date stringFromDate:[NSDate date]];
    [self.time setText:dateString];

Сначала мы создаем встроенный в obj-c NSDateFormatter с именем даты , затем применяем его с помощью [[NSDateFormatter alloc] init]; , После этого мы говорим обработчику кода, что мы хотим, чтобы у нашей даты было ЧАС / МИНУТА / ВТОРАЯ. Наконец, мы должны сделать нашу дату строкой для работы с предупреждением или установить значение метки, для этого мы должны создать строку с методом NSString, затем мы используем это: [date stringFromDate: [NSDate date]]

Веселитесь с этим.

3
4.06.2014 12:47:21