Стили для форматирования даты и времени с предпочтениями пользователя

Cocoa

NSDateFormatter делает для вас легким форматирование даты, используя настройки пользователя настраиваемые в системной панели.

Вы определяете стиль форматирования компоненты даты и времени независимо, используя setDateStyle:, и setTimeStyle: соответственно. В листинге 1 показано, как можно форматировать дату с помощью стилей форматирования. Обратите внимание на использование NSDateFormatterNoStyle для подавления компоненты времени и выдачи строки, содержащей только дату.

Листинг 1 Форматирование даты с использованием стилей форматирования

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateStyle:NSDateFormatterMediumStyle];
[dateFormatter setTimeStyle:NSDateFormatterNoStyle];

NSDate *date = [NSDate dateWithTimeIntervalSinceReferenceDate:162000];

NSString *formattedDateString = [dateFormatter stringFromDate:date];
NSLog(@"formattedDateString: %@", formattedDateString);
// Вывод для локали en_US: "formattedDateString: Jan 2, 2001"

Используйте формат строки для указания пользовательских форматов

Фиксированные форматы

Применять фиксированный формат строки может понадобиться например при Web программировании или при работе с полями даты в базе данных, требующих особый вид форматирования.

Хотя в принципе формат строки указывается фиксированным форматом, NSDateFormater по умолчанию по-прежнему занимает предпочтения пользователя (в том числе региональные параметры). Вы должны учитывать следующие моменты при использовании формата строки:

  • NSDateFormatter рассматривает числа в строке разбора, как если бы они были выбраны в календаре пользователя. Например, если пользователь выбирает буддисткий календарь , разбор 2010 года дает NSDate объект с 1467 годом в григорианском календаре.
  • В iOS, пользователь может изменить значение по умолчанию AM / PM по сравнению с 24-часовым отображением. Это может привести к тому, что NSDateFormatter перепишет строку формата, которую вы установили.
Обратите внимание, в Unicode формате строки формата, вы должны заключать обычный текст в строке формата между апострофами ('').

Следующий пример иллюстрирует использование формата строки для создания строки:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd"];
NSDate *date = [NSDate dateWithTimeIntervalSinceReferenceDate:162000];

NSString *s = [dateFormatter stringFromDate:date];

NSLog(@"Вывод: %@", s);
// Вывод: 2001-01-02 
// данный формат строки можно применить при работе с date полями postresql

[dateFormatter setDateFormat:@"yyyy-MM-dd 'at' HH:mm"];
NSString *s1 = [dateFormatter stringFromDate:date];
NSLog(@"Вывод: %@", s1);
// Вывод: 2001-01-02 at 13:00

Таблица символов полей формата даты

ПолеСимволКол-воПримерОписание
эраG1..3ADЭра - Заменяет эпоху в строке для текущей даты. От одной до трех букв для сокращенной формы четырех букв для длинной формы, пять для узкой формы.
4Anno Domini
5A
годy1..n2012Год. Обычно длина задает отступы, но двух букв также указывает максимальную длину. Пример:
Годyyyyyyyyyyyyyyy
AD 1101001000100001
AD 121212012001200012
AD 12312323123012300123
AD 12341234341234123401234
AD 123451234545123451234512345
Y1..n1997Год (в "Недельных годах" на основе календарей). Это обозначение года используется в ISO года календарной недели, как это определено ISO 8601, но может быть использован в не-григорианской календарной системе, в которой лучшая обработка недельных дат. Не всегда может быть одним и тем же значением с календарным годом.
u1..n4601Расширенный год. Это одно число, обозначающее год в календарной системе, охватывающей все сверх-годовые поля. Например, для системы по юлианскому календарю, числа года положительны, и для эпохи до нашей эры и и для нашей эры.Расширенное значение года для системы по юлианскому календарю назначает положительные значения года для н.э. и отрицательные значения для года до н.э., 1 год до н.э. должен быть годом 0.
кварталQ1..202Квартал - использование одного или двух для численного квартала, три для аббревиатуры, или четыре для полного наименования.
3Q2
42nd quarter
q1..202Автономный квартал - использование одного или двух для численного квартала, три для аббревиатуры, или четыре для полного наименования.
3Q2
42nd quarter
месяцM1..209Месяц - использование одного или двух для численного месяца, три для аббревиатуры, четыре для полного наименования или пять для уменьшенного наименования.
3Sept
4September
5S
L1..209Автономный месяц - использование одного или двух для численного месяца, три для аббревиатуры, четыре для полного наименования или пять для уменьшенного наименования.
3Sept
4September
5S
l1*Специальный символ китайского месяца, используется в сочетании с М. Используется только с китайским календарем.
неделяw1..227Неделя в году
W13Неделя в месяце
деньd1..21День в месяце
D1..3365День в году
F12День недели в месяце. Например для 2я Среда в июле
g1..n2451334Измененный Юлианский день. Отличается от обычного Юлианского дня в двух отношениях. Во-первых, он разграничивает дни в местной полуночной зоне, а не в полуденной по Гринвичу. Во-вторых, это локальное число, то есть, оно зависит от местного часового пояса. Это можно рассматривать как единое число, которое включает в себя все даты в смежных областях.
День неделиE1..3TuesДень недели - Использование одной до трех букв для короткого дня, четырех для полного наименования или пяти символов для уменьшенного наименования.
4Tuesday
5T
e1..22Локальный день недели. То же самое, что и E, за исключением того, что добавляет числовое значение, которое будет зависеть от локального первого дня недели, с использованием одной или двух букв. Для этого примера, в понедельник первый день недели.
3Tues
4Tuesday
5T
c12Автономный локальный день недели - использование одной буквы для местных числовых значений (так же как "e"), три для коротких наименований дня, четыре для полного наименования или пять для уменьшенного наименования.
3Tues
4Tuesday
5T
периодa1AMAM или PM
часh1..211Час [1-12]
H1..213Час [0-23]
K1..20Час [0-11]
k1..224Час [1-24]
j1..2n/aЭто символ специального назначения. Не следует использовать в шаблоне, но предназначен для использования в API, делает гибкими шаблоны даты и запрашивает предпочтительный формат (12 против 24 часового) для языка.
минутыm1..259Минуты. Используйте один или два для заполнения нулями.
секундыs1..212Секунды. Используйте один или два для заполнения нулями.
S1..n3457Доли секунды - обороты на количество букв. (пример для 12,34567)
A1..n69540000Миллисекунд в день. Это поле ведет себя так же, как составные всех временно-смежных областей, не включая поля зоны. Как таковая, она также отражает те разрывы поля перехода на летнее время дней. В день летнего наступления, оно будет прыгать вперед. В день летнего прекращения, оно будет прыгать назад. Это отражает тот факт, который должен быть объединен с полем смещения для получения уникального местного значения времени.
зонаz1..3PDT
резервные:
HPG-8:00
GMT-08:00
Часовой пояс - с определенным, не локальным форматом. Там, где это недоступно, возвращается к формату локализованных GMT. Использование от одной до трех букв на коротком формате или четырех для полного формата. В коротком формате, имена metazone не используются, если commonlyUsed флаг включен в локали.
4Тихоокеанское летнее время
резервные:
HPG-8:00
GMT-08:00
Z1..3-0800Часовой пояс - использование от одной до трех букв в формате RFC 822, четыре буквы для локализованного формата GMT.
4HPG+8:00
резервные:
GMT-08:00
v1PTЧасовой пояс - с общим, не локальным форматом. Там, где отсутствует, используются специальные резервные правила. Используйте одну букву для короткого формата, четыре для длинного формата.
4Тихоокеанское время
резервные:
Тихоокеанское время (Канада)
Тихоокеанское время (Йеллоунайф)
США (Лос Анжелес)
HPG-8:35
GMT-08:35
V1PST
резервные: HPG-8:00
GMT-08:00
Часовой пояс - в том же формате, как z, кроме того, что metazone сокращения часовых поясов, при наличии будут отображаться, независимо от значения флага commonlyUsed.
4США (Лос Анжелес)
HPG-8:35
GMT-08:35
 
 
homeЗаметили ошибкукарта сайта 
   Made on a Mac