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.

137
demandé sur Suragch 2010-06-08 16:03:30

10 réponses

je crois que c'est le sélecteur NSDate que vous recherchez:

- (NSTimeInterval)timeIntervalSince1970
261
répondu BAndonovski 2010-06-08 12:06:09

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];
68
répondu progrmr 2010-06-08 12:34:17

vous pouvez créer une date de timestamp unix à partir d'une date de cette façon:

int timestamp = [[NSDate date] timeIntervalSince1970];
26
répondu Peter Van de Put 2012-12-20 21:00:56
- (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.

9
répondu Vicky 2014-07-14 13:13:09

Swift

mise à jour pour Swift 3

// current date and time
let someDate = Date()

// time interval since 1970
let myTimeStamp = someDate.timeIntervalSince1970

Notes

  • timeIntervalSince1970 renvoie TimeInterval , qui est un typealias pour Double .
  • Si vous vouliez aller dans l'autre sens, vous pouvez faire ce qui suit:

    let myDate = Date(timeIntervalSince1970: myTimeStamp)
    
6
répondu Suragch 2017-01-12 01:50:39

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];  
}
5
répondu aahsanali 2011-10-21 11:43:04

Ma voie préférée est tout simplement:

NSDate.date.timeIntervalSince1970;
5
répondu Alex 2014-03-10 13:47:58

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.

4
répondu Tapan Thaker 2014-06-08 20:36:14
 [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

1
répondu user1105951 2018-07-22 17:47:08

si vous avez besoin d'un horodatage comme chaîne de caractères.

time_t result = time(NULL);                
NSString *timeStampString = [@(result) stringValue];
0
répondu nanjunda 2016-12-05 09:27:21