Заставить NSDateFormatter выдавать строку «UTC» вместо строки «GMT»? - PullRequest
0 голосов
/ 18 июня 2019

У меня есть следующий код 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» в результирующую строку даты.

1 Ответ

1 голос
/ 18 июня 2019

Не существует спецификатора формата даты, который возвращает UTC.

Поскольку вы жестко кодируете часовой пояс UTC для форматера, просто жестко закодируйте строку UTC в формате даты.

Также обратите внимание, что вы хотите yyyy, а не YYYY за год.

[dateFormatter setDateFormat:@"yyyy-MM-dd--HH-mm-ss 'UTC'"];

Если вам нужно обработать другие часовые пояса и вы хотите, чтобы GMT отображался как UTC, тогда используйте zzz (как вы уже сделали) и используйте замену строки в результате для преобразования GMT в UTC.

Еще одна возможная идея, которую следует рассмотреть, - это использовать некоторое число X для спецификатора часового пояса. Это даст смещение часового пояса в виде чисел, но если смещение часового пояса равно 0, то это приведет к Z (для зулу).

...