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

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

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

Как?


person Sagar R. Kothari    schedule 06.11.2009    source источник


Ответы (4)


Вам нужен модуль форматирования даты. Вот пример:

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

NSDate *currentDate = [NSDate date];
NSString *dateString = [formatter stringFromDate:currentDate];
person Carl Norum    schedule 06.11.2009
comment
Если вы не хотите сохранить его; управление памятью может быть, а может и не быть проблемой. - person Carl Norum; 06.11.2009
comment
Форматтеры даты очень медленно настраиваются. Если вы устанавливаете даты в ячейке таблицы или делаете это часто, как упоминалось выше, вы захотите сохранить их, использовать их для всего, а затем освободить их в Dealloc. - person Steve Weller; 07.11.2009
comment
@ Моше, ты пробовал читать документацию? a — это строка формата для периода AM/PM. unicode.org/reports/tr35/tr35-10.html#Date_Format_Patterns - person Carl Norum; 27.01.2012
comment
@CarlNorum Да, я сделал. Один не работает. Я собираюсь опубликовать вопрос через мгновение, если я не могу заставить его работать. РЕДАКТИРОВАТЬ: Моя ошибка, я идиот. - person Moshe; 27.01.2012

Либо используйте 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);
person Stephen Canon    schedule 06.11.2009
comment
Обратите внимание, что вы не можете сделать слишком много со строкой C в Objective C. Это может быть более удобно при записи чего-либо в консоль. Вы можете просто сказать NSLog(@"%s", buffer). - person Donovan Voss; 06.11.2009
comment
Все, что вы можете сделать со строкой C в C, вы можете сделать и в Objective-C. То есть почти все. Можно свободно использовать как строки C, так и строки NSString, и выбирать подходящую для текущего варианта использования. Лично я бы выбрал решение Карла, но важно знать, что это не единственный способ. - person Stephen Canon; 06.11.2009
comment
Я бы сказал, что причина не использовать strftime (несмотря на то, что он генерирует строку C, которую затем нужно преобразовать), заключается в том, что вы также теряете гораздо большую гибкость параметров форматирования даты NSDateFormatter, включая более переменную длину числовых результатов и так далее. на. - person Kendall Helmstetter Gelner; 07.11.2009
comment
это должно быть предпочтительным способом на iOS из-за этой ошибки stackoverflow.com/questions/143075/ , однако я обнаружил, что time() или localtime_r() не всегда точны, я вижу очень странные результаты. - person valexa; 12.09.2010

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

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

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

person Zorayr    schedule 25.02.2014
comment
Разве вы не должны создать дату где-нибудь? Вы его не передаете. - person Randy; 10.01.2015
comment
Хороший улов @Randy, только что обновил функцию, чтобы передать объект date в качестве параметра. - person Zorayr; 11.01.2015

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

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

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

Получайте удовольствие от этого.

person AmirHossein    schedule 04.06.2014