Objective-C настройка NSDate на текущий UTC

Есть ли простой способ инициализировать NSDate с текущей датой/временем UTC?

Ответ 1

[NSDate date];

Возможно, вы захотите создать категорию, которая сделает что-то вроде этого:

-(NSString *)getUTCFormateDate:(NSDate *)localDate
{
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:@"UTC"];
    [dateFormatter setTimeZone:timeZone];
    [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
    NSString *dateString = [dateFormatter stringFromDate:localDate];
    [dateFormatter release];
    return dateString;
}

Ответ 2

NSDate является ссылкой на интервал от абсолютной контрольной даты, 1 января 2001 года 00:00 GMT. Таким образом, метод класса [NSDate date] вернет представление этого интервала. Чтобы представить эти данные в текстовом формате в формате UTC, просто используйте NSDateFormatter с соответствующим NSTimeZone (UTC) для рендеринга по мере необходимости.

Ответ 3

NSDate объекты инкапсулируют единую точку во времени, независимо от какой-либо конкретной календарной системы или часового пояса. Объекты Date являются неизменяемыми, представляя собой инвариантный временной интервал относительно абсолютной контрольной даты (00:00:00 UTC 1 января 2001 года).

Быстрая версия:

extension NSDate {
    func getUTCFormateDate() -> String {
        let dateFormatter = NSDateFormatter()
        let timeZone = NSTimeZone(name: "UTC")
        dateFormatter.timeZone = timeZone
        dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
        return dateFormatter.stringFromDate(self)
    }
}