Quelqu'un peut-il me donner une idée comment obtenir la date actuelle en millisecondes?
Quelqu'un peut-il me donner une idée comment obtenir la date actuelle en millisecondes?
Réponses:
Il y a plusieurs façons de le faire, bien que ma préférée soit:
CFAbsoluteTime timeInSeconds = CFAbsoluteTimeGetCurrent();
Vous pouvez en savoir plus sur cette méthode ici . Vous pouvez également créer un objet NSDate et obtenir l'heure en appelant timeIntervalSince1970 qui renvoie les secondes depuis le 1/1/1970:
NSTimeInterval timeInSeconds = [[NSDate date] timeIntervalSince1970];
Et dans Swift:
let timeInSeconds: TimeInterval = Date().timeIntervalSince1970
CFAbsoluteTimeGetCurrent()
renvoie l'heure par rapport à la date de référence Jan 1 2001 00:00:00 GMT
. Non pas qu'une date de référence ait été donnée dans la question, mais sachez qu'il ne s'agit pas d'un horodatage UNIX.
Lancer le NSTimeInterval directement sur un long débordé pour moi, donc à la place j'ai dû le lancer sur un long long.
long long milliseconds = (long long)([[NSDate date] timeIntervalSince1970] * 1000.0);
Le résultat est un horodatage à 13 chiffres comme sous Unix.
timeIntervalSince1970
méthode renvoie les secondes sur le nombre entier, mais c'est un double
qui inclut également la fraction de seconde qui peut être convertie arithmétiquement en millisecondes. D'où la multiplication par 1000.
long long
? cette langue est si bizarre
NSTimeInterval milisecondedDate = ([[NSDate date] timeIntervalSince1970] * 1000);
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()
}
}
Vous pouvez simplement faire ceci:
long currentTime = (long)(NSTimeInterval)([[NSDate date] timeIntervalSince1970]);
cela renverra une valeur en millisecondes, donc si vous multipliez la valeur résultante par 1000 (comme suggéré mes Eimantas), vous déborderez le type long et cela entraînera une valeur négative.
Par exemple, si j'exécute ce code maintenant, cela entraînera
currentTime = 1357234941
et
currentTime /seconds / minutes / hours / days = years
1357234941 / 60 / 60 / 24 / 365 = 43.037637652207
@JavaZava votre solution est bonne, mais si vous voulez avoir une valeur longue de 13 chiffres pour être cohérente avec le formatage de l'horodatage en Java ou JavaScript (et dans d'autres langages), 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];
Comme indiqué précédemment, [[NSDate date] timeIntervalSince1970] renvoie un NSTimeInterval, qui est une durée en secondes et non en milli-secondes.
Vous pouvez visiter https://currentmillis.com/ pour voir comment vous pouvez obtenir dans la langue que vous désirez. 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 l'objectif CI a 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 que cela aide.
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?
- (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;
}
Utilisez ceci pour obtenir l'heure en millisecondes (long)(NSTimeInterval)([[NSDate date] timeIntervalSince1970])
.