2010-04-11 4 views
79

Objective-C Czy istnieje prosty sposób init jest NSDate z aktualną datą UTC/czas?ustawienie NSDate do aktualnej UTC

+1

Czy '[NSDate date]' działa? Nie jestem pewien, czy to UTC. – zneak

+0

Chcesz NSDate ustawiony na UTC. (Nie wiem, dlaczego wszyscy podają wartości "lokalnej daty" lub "NSString"). – Patricia

+2

Nie ma czegoś takiego, jak "NSDate" ustawione na UTC, nie ma z nim strefy czasowej. –

Odpowiedz

144

[NSDate date];

Możesz stworzyć kategorię, która robi coś takiego:

-(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]; , który przybity to dzięki – Brodie

+4

nie zapomnij wydać formatyzatora daty ... –

+1

, jeśli przejdzie do produkcji, może naprawdę chcesz utworzyć statyczny DateFormatter, który jest leniwy inicjowany. Utworzenie obiektu dateFormatter jest w rzeczywistości dość kosztowne. – jessecurry

13

NSDate jest odniesienie do przedziału od absolutnego dniu referencyjnym, 01 stycznia 2001 00:00 GMT . Tak więc metoda klasy [Data NSDate] zwróci reprezentację tego odstępu. Aby przedstawić te dane w formacie tekstowym w UTC, wystarczy użyć NSDateFormatter z odpowiednim NSTimeZone (UTC) do renderowania w razie potrzeby.

+3

Wierzę, że [NSDate teraz] powinno być [data NSDate] w tej odpowiedzi. – foldinglettuce

+0

Masz poprawną @foldinglettuce - naprawiono. – rcw3

2

NSDate przedmioty otaczają jeden punkt w czasie, niezależnie od jakiegokolwiek układu calendrical lub strefy czasowej. Obiekty daty są niezmienne, co stanowi niezmienny przedział czasu w stosunku do bezwzględnej daty odniesienia (00:00:00 UTC z 1 stycznia 2001 r.).

wersja 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) 
    } 
}