Antworten:
Ich glaube, dies ist der Selektor des NSDate, den Sie suchen:
- (NSTimeInterval)timeIntervalSince1970
Ein Unix-Zeitstempel ist die Anzahl der Sekunden seit 00:00:00 UTC am 1. Januar 1970. Er wird durch den Typ time_t dargestellt , bei dem es sich normalerweise um einen vorzeichenbehafteten 32-Bit-Integer-Typ (long oder int) handelt.
iOS bietet - (NSTimeInterval) timeIntervalSince1970 für NSDate-Objekte, das die Anzahl der Sekunden seit 00:00:00 GMT am 1. Januar 1970 zurückgibt. NSTimeInterval ist ein doppelter Gleitkommatyp, sodass Sie die Sekunden und Bruchteile einer Sekunde erhalten.
Da beide dieselbe Referenz haben (Mitternacht, 1. Januar 1970 UTC) und beide in Sekunden sind, ist die Konvertierung einfach. Konvertieren Sie das NSTimeInterval in ein time_t, runden oder kürzen Sie es je nach Ihren Anforderungen:
time_t unixTime = (time_t) [[NSDate date] timeIntervalSince1970];
int unixTime = floor([piece.piece_last_view timeIntervalSince1970])
wopiece.piece.last_view ein NSDate ist
Sie können ein Unix-Zeitstempeldatum aus einem Datum folgendermaßen erstellen:
NSTimeInterval timestamp = [[NSDate date] timeIntervalSince1970];
- (void)GetCurrentTimeStamp
{
NSDateFormatter *objDateformat = [[NSDateFormatter alloc] init];
[objDateformat setDateFormat:@"yyyy-MM-dd"];
NSString *strTime = [objDateformat stringFromDate:[NSDate date]];
NSString *strUTCTime = [self GetUTCDateTimeFromLocalTime:strTime];//You can pass your date but be carefull about your date format of NSDateFormatter.
NSDate *objUTCDate = [objDateformat dateFromString:strUTCTime];
long long milliseconds = (long long)([objUTCDate timeIntervalSince1970] * 1000.0);
NSString *strTimeStamp = [Nsstring stringwithformat:@"%lld",milliseconds];
NSLog(@"The Timestamp is = %@",strTimestamp);
}
- (NSString *) GetUTCDateTimeFromLocalTime:(NSString *)IN_strLocalTime
{
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd"];
NSDate *objDate = [dateFormatter dateFromString:IN_strLocalTime];
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];
NSString *strDateTime = [dateFormatter stringFromDate:objDate];
return strDateTime;
}
HINWEIS: - Der Zeitstempel muss sich in der UTC-Zone befinden. Daher konvertiere ich unsere Ortszeit in die UTC-Zeit.
Aktualisiert für Swift 3
// current date and time
let someDate = Date()
// time interval since 1970
let myTimeStamp = someDate.timeIntervalSince1970
Anmerkungen
timeIntervalSince1970
gibt zurück TimeInterval
, was ein typealias für ist Double
.
Wenn Sie in die andere Richtung gehen möchten, können Sie Folgendes tun:
let myDate = Date(timeIntervalSince1970: myTimeStamp)
Wenn Sie diese Zeit in einer Datenbank speichern oder über den Server senden möchten, verwenden Sie am besten Unix-Zeitstempel. Hier ist ein kleiner Ausschnitt, um das zu bekommen:
+ (NSTimeInterval)getUTCFormateDate{
NSDateComponents *comps = [[NSCalendar currentCalendar]
components:NSDayCalendarUnit | NSYearCalendarUnit | NSMonthCalendarUnit
fromDate:[NSDate date]];
[comps setHour:0];
[comps setMinute:0];
[comps setSecond:[[NSTimeZone systemTimeZone] secondsFromGMT]];
return [[[NSCalendar currentCalendar] dateFromComponents:comps] timeIntervalSince1970];
}
[[NSTimeZone systemTimeZone] secondsFromGMT]]
? Bitte erklären Sie wenig.
Gemäß dem Vorschlag von @ kexik, die UNIX-Zeitfunktion wie folgt zu verwenden:
time_t result = time(NULL);
NSLog([NSString stringWithFormat:@"The current Unix epoch time is %d",(int)result]);
Nach meiner Erfahrung - verwenden Sie timeIntervalSince1970 nicht, es gibt einen Epochenzeitstempel - Anzahl der Sekunden, die Sie hinter GMT stehen.
Früher gab es einen Fehler mit [[NSDate date] timeIntervalSince1970]. Früher wurde die Zeit basierend auf der Zeitzone des Telefons addiert / subtrahiert, aber jetzt scheint sie behoben zu sein.
[NSString stringWithFormat: @"first unixtime is %ld",message,(long)[[NSDate date] timeIntervalSince1970]];
[NSString stringWithFormat: @"second unixtime is %ld",message,[[NSDate date] timeIntervalSince1970]];
[NSString stringWithFormat: @"third unixtime is %.0f",message,[[NSDate date] timeIntervalSince1970]];
erste Unixtime 1532278070
zweite Unixtime 1532278070.461380
dritte Unixtime 1532278070