web-dev-qa-db-fra.com

Comment convertir NSDate en unix timestamp iphone sdk?

Comment convertir une NSDate en horodatage Unix? J'ai lu beaucoup d'articles qui font l'inverse. Mais je ne trouve rien en relation avec ma question.

139
neha

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

- (NSTimeInterval)timeIntervalSince1970
264
BAndonovski

Un horodatage Unix correspond au nombre de secondes écoulées depuis le 1er janvier 1970 à 00:00:00 UTC. Il est représenté par le type time_t , qui est généralement un type entier signé de 32 bits (long ou int). .

iOS fournit - (NSTimeInterval) timeIntervalSince1970 pour les objets NSDate qui renvoie le nombre de secondes écoulées depuis le 1er janvier 1970 à 00:00:00 GMT. NSTimeInterval est un type à virgule flottante double pour obtenir les secondes et les fractions de seconde.

Puisqu'ils ont tous les deux la même référence (minuit, le 1 janvier 1970) et qu'ils sont tous les deux en quelques secondes, la conversion est facile, convertissez NSTimeInterval en time_t, arrondi ou tronqué en fonction de vos besoins:

time_t unixTime = (time_t) [[NSDate date] timeIntervalSince1970];
68
progrmr

Vous pouvez créer une date d'horodatage Unix à partir d'une date de cette façon:

NSTimeInterval timestamp = [[NSDate date] timeIntervalSince1970];
26
Peter Van de Put
- (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. Je convertis donc l'heure locale en heure UTC.

9
Vicky

Rapide

_ {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 voulez aller dans l'autre sens, vous pouvez faire ce qui suit:

    let myDate = Date(timeIntervalSince1970: myTimeStamp)
    
6
Suragch

Ma manière préférée est simplement:

NSDate.date.timeIntervalSince1970;
5
Alex

Si vous souhaitez stocker ces heures dans une base de données ou les envoyer sur le serveur ... utilisez de préférence 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];  
}
5
aahsanali

Selon les suggestions de @ kexik, utilisez la fonction de temps UNIX comme suit: 

  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 la période - le nombre de secondes que vous avez par rapport à GMT.

Il y avait un bogue avec [[NSDate date] timeIntervalSince1970], il était utilisé pour ajouter/soustraire du temps en fonction du fuseau horaire du téléphone, mais il semble être résolu maintenant.

4
Tapan Thaker
 [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 heure unixtime 1532278070

1
user1105951

Si vous avez besoin de l'horodatage sous forme de chaîne.

time_t result = time(NULL);                
NSString *timeStampString = [@(result) stringValue];
0
nanjunda