Quand vous dites la date actuelle en millisecondes, que voulez-vous dire? Pouvez-vous donner un exemple de votre production attendue pour une date précise?
lnafziger
Réponses:
103
Il y a plusieurs façons de le faire, bien que ma préférée soit:
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:
Im essayant ce code suivant NSTimeInterval milisecondedDate = ([[NSDate date] timeIntervalSince1970] * 1000); NSLog (@ "didReceiveResponse ----% d", millisecondedDate);
siva
2
Le problème vient de l'instruction NSLog. NSTimeInterval est un double typedefed. Vous devez donc utiliser% f au lieu de% d.
Pawel
55
[[NSDate date] timeIntervalSince1970] renvoie un NSTimeInterval, qui est une durée en secondes et non en milli-secondes.
Erik van der Neut
12
Notez que 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.
nyi le
2
[[NSDate date] timeIntervalSince1970] renvoie l'heure en secondes et non en millisecondes.
SAPLogix
61
Lancer le NSTimeInterval directement sur un long débordé pour moi, donc à la place j'ai dû le lancer sur un long long.
Cela ne renverra pas les millisecondes réelles car timeIntervalSince1970 renvoie l'intervalle en secondes, nous n'aurons donc pas la précision souhaitée en millisecondes.
Danpe
9
La timeIntervalSince1970 méthode renvoie les secondes sur le nombre entier, mais c'est un doublequi inclut également la fraction de seconde qui peut être convertie arithmétiquement en millisecondes. D'où la multiplication par 1000.
wileymab
@wileymap Oui, vous avez raison. Je l'ai compris plus tard
Danpe
2
long long? cette langue est si bizarre
user924
@ user924 Je ne peux pas être plus d'accord. C'est pourquoi j'ai arrêté de l'écrire. ;)
Im essayant ce code suivant NSTimeInterval milisecondedDate = ([[NSDate date] timeIntervalSince1970] * 1000); NSLog (@ "didReceiveResponse ----% d", millisecondedDate); - mais il montre la valeur en valeur négative - comme ResponseTIME ---- 556610175 ResponseTIME ---- -1548754395
siva
1
essayez d'utiliser l'espace réservé% f au lieu de% d. Si cela n'aide pas - supprimez la multiplication par 1000
Eimantas
@ Eimantas, lorsque j'essaie d'utiliser% f ... Im obtenant le temps comme suit Temps de réponse = 1306494959011.239014 Temps de réponse = 1306494910724.744141 Si c'est ms, le temps ci-dessus est supérieur à une heure.
siva
La date actuelle est l'intervalle de temps en secondes depuis 1970. Vous n'avez rien mentionné sur la date de référence.
Eimantas
Je ne prendrai que l'intervalle de date actuel
siva
8
extension NSDate{
func toMillis()->NSNumber{returnNSNumber(longLong:Int64(timeIntervalSince1970 *1000))}static func fromMillis(millis:NSNumber?)->NSDate?{return millis.map(){ number in NSDate(timeIntervalSince1970:Double(number)/1000)}}static func currentTimeInMillis()->NSNumber{returnNSDate().toMillis()}}
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 doublelong digits =(long)time;// this is the first 10 digitsint decimalDigits =(int)(fmod(time,1)*1000);// this will get the 3 missing digitslong timestamp =(digits *1000)+ decimalDigits;
NSString * timestampString = [NSString stringWithFormat: @ "% ld% 03d", chiffres, decimalDigits]; est correct en fait. Dans votre cas, si la valeur de decimalDigits est inférieure à 100, le résultat sera incorrect.
PANKAJ VERMA
4
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(newDate()).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/GoogleSheets*=(NOW()- CELL_WITH_TIMEZONE_OFFSET_IN_HOURS/24- DATE(1970,1,1))*86400000Go/Golang time.Now().UnixNano()/1000000Hive* unix_timestamp()*1000Java/Groovy/KotlinSystem.currentTimeMillis()JavascriptnewDate().getTime()MySQL* UNIX_TIMESTAMP()*1000Objective-C (longlong)([[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())*1000Pythonint(round(time.time()*1000))QtQDateTime::currentMSecsSinceEpoch()
R* as.numeric(Sys.time())*1000Ruby(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')*1000Swift* let currentTime =NSDate().timeIntervalSince1970 *1000VBScript/ ASP offsetInMillis =60000*GetTimeZoneOffset()WScript.EchoDateDiff("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 -
longlong mills =(longlong)([[NSDate date] timeIntervalSince1970]*1000.0);NSLog(@"Current date %lld", mills);
-(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];longlong milliseconds =(longlong)([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;}
Réponses:
Il y a plusieurs façons de le faire, bien que ma préférée soit:
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:
Et dans Swift:
la source
CFAbsoluteTimeGetCurrent()
renvoie l'heure par rapport à la date de référenceJan 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.
Le résultat est un horodatage à 13 chiffres comme sous Unix.
la source
timeIntervalSince1970
méthode renvoie les secondes sur le nombre entier, mais c'est undouble
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 bizarrela source
la source
Vous pouvez simplement faire ceci:
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
et
la source
@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:
ou (si vous avez besoin d'une chaîne):
la source
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 -
Pour l'objectif CI a fait quelque chose comme ci-dessous pour l'imprimer -
Hopw que cela aide.
la source
Cconvertir la
NSTimeInterval
milisecondedDate
valeurnsstring
et ensuite la convertir enint
.la source
Vous pouvez utiliser les méthodes suivantes pour obtenir la date actuelle en millisecondes.
OU
Source: iPhone: Comment obtenir les millisecondes actuelles?
la source
la source
Utilisez ceci pour obtenir l'heure en millisecondes
(long)(NSTimeInterval)([[NSDate date] timeIntervalSince1970])
.la source
Une prolongation de date est probablement le meilleur moyen d'y parvenir.
la source