У меня есть следующий код Objective-C, который пытается создать строку с текущей датой/временем в формате UTC:
NSDate *currentDate = [NSDate date];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
NSTimeZone *utc = [NSTimeZone timeZoneWithName:@"UTC"];
[dateFormatter setTimeZone:utc];
[dateFormatter setDateFormat:@"YYYY-MM-dd--HH-mm-ss zzz"];
NSString *utcDateString = [dateFormatter stringFromDate:currentDate];
Этот код почти генерирует то, что я хочу. Результирующее значение utcDateString в моей системе:
2019-06-17--22-28-13 GMT
Однако мой желаемый вывод включает строку «UTC», нет «GMT», как в:
2019-06-17--22-28-13 UTC
Есть ли способ заставить NSDateFormatter выдавать строку «UTC» для части zzz формата даты? Я бы предпочел не прибегать к отключению «zzz» от моей строки формата даты, а затем вручную добавлять «UTC» к полученной строке даты.





Нет спецификатора формата даты, который возвращает UTC.
Поскольку вы жестко кодируете часовой пояс UTC для средства форматирования, просто жестко кодируйте строку UTC в формате даты.
Также обратите внимание, что вы хотите yyyy, а не YYYY для года.
[dateFormatter setDateFormat:@"yyyy-MM-dd--HH-mm-ss 'UTC'"];
Если вам нужно обрабатывать другие часовые пояса и вы хотите, чтобы GMT отображалось как UTC, используйте zzz (как вы уже есть) и используйте замену строки в результате, чтобы преобразовать GMT в UTC.
Еще одна возможная идея — использовать некоторое количество X для спецификатора часового пояса. Это даст смещение часового пояса в виде чисел, но если смещение часового пояса равно 0, то это приведет к Z (для зулусов).