Comment convertir NSDate en unix timestamp iphone sdk?
comment convertir un NSDate
en timestamp Unix? J'ai lu beaucoup de billets qui font l'inverse. Mais je ne trouve rien en rapport avec ma question.
10 réponses
je crois que c'est le sélecteur NSDate que vous recherchez:
- (NSTimeInterval)timeIntervalSince1970
A timestamp 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 habituellement un type entier signé de 32 bits (long ou int).
iOS fournit -(NSTimeInterval)timeIntervalSince1970 pour NSDate objets qui retourne le nombre de secondes écoulées depuis 00:00:00 GMT le 1er janvier 1970. NSTimeInterval est un type de point flottant double donc vous obtenez 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 L'interval Nstimeen un time_t, en arrondissant ou tronquant selon vos besoins:
time_t unixTime = (time_t) [[NSDate date] timeIntervalSince1970];
vous pouvez créer une date de timestamp unix à partir d'une date de cette façon:
int 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;
}
NOTE :- L'horodatage doit être dans la Zone UTC, donc je convertis notre heure locale en heure UTC.
Swift
mise à jour pour Swift 3
// current date and time
let someDate = Date()
// time interval since 1970
let myTimeStamp = someDate.timeIntervalSince1970
Notes
-
timeIntervalSince1970
renvoieTimeInterval
, qui est un typealias pourDouble
. -
Si vous vouliez aller dans l'autre sens, vous pouvez faire ce qui suit:
let myDate = Date(timeIntervalSince1970: myTimeStamp)
si vous voulez stocker ces temps dans une base de données ou les envoyer sur le serveur...le mieux est D'utiliser des horodateurs Unix. Voici un petit extrait pour comprendre cela:
+ (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];
}
Ma voie préférée est tout simplement:
NSDate.date.timeIntervalSince1970;
selon la suggestion de @kexik en utilisant la fonction UNIX time comme ci-dessous:
time_t result = time(NULL);
NSLog([NSString stringWithFormat:@"The current Unix epoch time is %d",(int)result]);
.D'après mon expérience-ne pas utiliser timeIntervalSince1970, il donne Epoch timestamp-le nombre de secondes que vous êtes en retard GMT.
il y avait un bug avec [[date de mise à jour]timeIntervalSince1970] , il était utilisé pour ajouter/soustraire le temps basé sur le 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
second unixtime 1532278070.461380
troisième unixtime 1532278070
si vous avez besoin d'un horodatage comme chaîne de caractères.
time_t result = time(NULL);
NSString *timeStampString = [@(result) stringValue];