web-dev-qa-db-fra.com

Obtenir la date actuelle en millisecondes

Quelqu'un peut-il me donner une idée de la façon d'obtenir la date actuelle en millisecondes?

83
siva

Il y a plusieurs façons de le faire, bien que mon préféré est: 

CFAbsoluteTime timeInSeconds = CFAbsoluteTimeGetCurrent();

Vous pouvez en savoir plus sur cette méthode here . Vous pouvez également créer un objet NSDate et obtenir l'heure en appelant timeIntervalSince1970 qui renvoie le seconds depuis le 1/1/1970:

NSTimeInterval timeInSeconds = [[NSDate date] timeIntervalSince1970];

Et à Swift: 

let timeInSeconds: TimeInterval = Date().timeIntervalSince1970
94
Pawel

Jeter le NSTimeInterval directement sur un long débordement pour moi, alors je devais au contraire lancer un long.

long long milliseconds = (long long)([[NSDate date] timeIntervalSince1970] * 1000.0);

Le résultat est un horodatage à 13 chiffres comme sous Unix.

58
wileymab
NSTimeInterval milisecondedDate = ([[NSDate date] timeIntervalSince1970] * 1000);
10
Eimantas
extension NSDate {

    func toMillis() -> NSNumber {
        return NSNumber(longLong:Int64(timeIntervalSince1970 * 1000))
    }

    static func fromMillis(millis: NSNumber?) -> NSDate? {
        return millis.map() { number in NSDate(timeIntervalSince1970: Double(number) / 1000)}
    }

    static func currentTimeInMillis() -> NSNumber {
        return NSDate().toMillis()
    }
}
7
Siamaster

Vous pouvez simplement faire ceci:

long currentTime = (long)(NSTimeInterval)([[NSDate date] timeIntervalSince1970]);

cela retournera une valeur en millisecondes, donc si vous multipliez la valeur résultante par 1000 (comme suggéré par mes Eimantas), vous déborderez du type long et vous obtiendrez une valeur négative.

Par exemple, si je lance ce code maintenant, cela se traduira par

currentTime = 1357234941

et 

currentTime /seconds / minutes / hours / days = years
1357234941 / 60 / 60 / 24 / 365 = 43.037637652207
6
JavaZava

@JavaZava, votre solution est bonne, mais si vous voulez avoir une valeur longue de 13 chiffres pour être cohérent avec le formatage de l'horodatage en Java ou en JavaScript (et d'autres langues), utilisez cette méthode:

NSTimeInterval time = ([[NSDate date] timeIntervalSince1970]); // returned as a double
long digits = (long)time; // this is the first 10 digits
int decimalDigits = (int)(fmod(time, 1) * 1000); // this will get the 3 missing digits
long timestamp = (digits * 1000) + decimalDigits;

ou (si vous avez besoin d'une chaîne):

NSString *timestampString = [NSString stringWithFormat:@"%ld%d",digits ,decimalDigits];
5
Itai Hanski

Comme indiqué précédemment, [[NSDate date] timeIntervalSince1970] renvoie un NSTimeInterval, qui est une durée en secondes et non en millisecondes.

Vous pouvez visiter https://currentmillis.com/ pour voir comment vous pouvez obtenir dans la langue de votre choix. Voici la liste -

ActionScript    (new Date()).time
C++ std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_Epoch()).count()
C#.NET  DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()
Clojure (System/currentTimeMillis)
Excel / Google Sheets*  = (NOW() - CELL_WITH_TIMEZONE_OFFSET_IN_HOURS/24 - DATE(1970,1,1)) * 86400000
Go / Golang time.Now().UnixNano() / 1000000
Hive*   unix_timestamp() * 1000
Java / Groovy / Kotlin  System.currentTimeMillis()
Javascript  new Date().getTime()
MySQL*  UNIX_TIMESTAMP() * 1000
Objective-C (long long)([[NSDate date] timeIntervalSince1970] * 1000.0)
OCaml   (1000.0 *. Unix.gettimeofday ())
Oracle PL/SQL*  SELECT (SYSDATE - TO_DATE('01-01-1970 00:00:00', 'DD-MM-YYYY HH24:MI:SS')) * 24 * 60 * 60 * 1000 FROM DUAL
Perl    use Time::HiRes qw(gettimeofday); print gettimeofday;
PHP round(microtime(true) * 1000)
PostgreSQL  extract(Epoch FROM now()) * 1000
Python  int(round(time.time() * 1000))
Qt  QDateTime::currentMSecsSinceEpoch()
R*  as.numeric(Sys.time()) * 1000
Ruby    (Time.now.to_f * 1000).floor
Scala   val timestamp: Long = System.currentTimeMillis
SQL Server  DATEDIFF(ms, '1970-01-01 00:00:00', GETUTCDATE())
SQLite* STRFTIME('%s', 'now') * 1000
Swift*  let currentTime = NSDate().timeIntervalSince1970 * 1000
VBScript / ASP  offsetInMillis = 60000 * GetTimeZoneOffset()
WScript.Echo DateDiff("s", "01/01/1970 00:00:00", Now()) * 1000 - offsetInMillis + Timer * 1000 mod 1000

Pour Objective C, j'ai fait quelque chose comme ci-dessous pour l'imprimer -

long long mills = (long long)([[NSDate date] timeIntervalSince1970] * 1000.0);
 NSLog(@"Current date %lld", mills);

Hopw cela aide.

2
Aniket Thakur

Cconvert NSTimeIntervalmilisecondedDate valeur à nsstring et après que convertir en int.

1
vikash

Utilisez ceci pour obtenir le temps en millisecondes (long)(NSTimeInterval)([[NSDate date] timeIntervalSince1970]).

0
Tanvi Jain

Une prolongation de la date est probablement le meilleur moyen de le résoudre. 

extension NSDate {
    func msFromEpoch() -> Double {
        return self.timeIntervalSince1970 * 1000
    }
}
0
joslinm
- (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;
    }
0
Vicky

Vous pouvez utiliser les méthodes suivantes pour obtenir la date actuelle en millisecondes.

[[NSDate date] timeIntervalSince1970];

OU 

double CurrentTime = CACurrentMediaTime(); 

Source: iPhone: Comment obtenir les millisecondes actuelles?

0