Réponses:
Je crois que c'est le sélecteur NSDate que vous recherchez:
- (NSTimeInterval)timeIntervalSince1970
Un horodatage Unix est le nombre de secondes depuis 00:00:00 UTC le 1er janvier 1970. Il est représenté par le type time_t , qui est généralement un type entier 32 bits signé (long ou int).
iOS fournit - (NSTimeInterval) timeIntervalSince1970 pour les objets NSDate qui renvoie le nombre de secondes depuis 00:00:00 GMT le 1er janvier 1970. NSTimeInterval est un type à virgule flottante double, vous obtenez donc les secondes et les fractions de seconde.
Puisqu'ils ont tous les deux la même référence (minuit 1Jan1970 UTC) et sont tous les deux en secondes, la conversion est facile, convertissez le NSTimeInterval en time_t, arrondi ou tronqué selon vos besoins:
time_t unixTime = (time_t) [[NSDate date] timeIntervalSince1970];
int unixTime = floor([piece.piece_last_view timeIntervalSince1970])
où piece.piece.last_view est un NSDate
Vous pouvez créer une date d'horodatage unix à partir d'une date de cette façon:
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;
}
REMARQUE: - L'horodatage doit être dans la zone UTC, donc je convertis notre heure locale en heure UTC.
Mis à jour pour Swift 3
// current date and time
let someDate = Date()
// time interval since 1970
let myTimeStamp = someDate.timeIntervalSince1970
Remarques
timeIntervalSince1970
renvoie TimeInterval
, qui est un typealias pour Double
.
Si vous vouliez aller dans l'autre sens, vous pourriez faire ce qui suit:
let myDate = Date(timeIntervalSince1970: myTimeStamp)
Si vous souhaitez stocker ces heures dans une base de données ou les envoyer sur le serveur ... le mieux est d'utiliser les horodatages Unix. Voici un petit extrait pour l'obtenir:
+ (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]]
:? Veuillez expliquer peu.
Selon la suggestion de @ kexik en utilisant la fonction de temps UNIX comme ci-dessous:
time_t result = time(NULL);
NSLog([NSString stringWithFormat:@"The current Unix epoch time is %d",(int)result]);
.Selon mon expérience - n'utilisez pas timeIntervalSince1970, cela donne l'horodatage de l'époque - le nombre de secondes que vous êtes derrière GMT.
Il y avait un bogue avec [[NSDate date] timeIntervalSince1970], il ajoutait / soustrait l'heure en fonction du fuseau horaire du téléphone mais il semble être résolu maintenant.
[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]];
premier unixtime 1532278070
deuxième unixtime 1532278070.461380
troisième unixtime 1532278070