2010-04-11 2 views
79

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

+1

бы '[дата NSDate]' работает? Я не уверен, что это UTC. – zneak

+0

Вы хотите установить NSDate в UTC. (Не знаете, почему все дают вам значения «local date» или «NSString».) – Patricia

+2

В UTC нет такой вещи, как «NSDate», у нее нет связанной с ней часовой пояс. –

ответ

144

[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

NSTimeZone * timeZone = [NSTimeZone timeZoneWithName: @ "UTC"]; [dateFormatter setTimeZone: timeZone]; – Brodie

+4

не забудьте выпустить форматировщик даты ... –

+1

Если это движется в производство, вам действительно может понадобиться создать статический dateFormatter, который инициализируется ленивым. Создание dateFormatter на самом деле несколько дороже. – jessecurry

13

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

+3

Я считаю, что [NSDate now] должен быть [NSDate date] в этом ответе. – foldinglettuce

+0

Вы правы @foldinglettuce - исправлены. – rcw3

2

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

Swift версия:

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) 
    } 
} 
Смежные вопросы