Je suis prêt à demander si quelqu'un a un bon algorithme (ou moyens) pour vérifier si deux variable SYSTEMTIME a un diff de 30 jours ou plus?30 jours Différence sur SYSTEMTIME
Merci
Je suis prêt à demander si quelqu'un a un bon algorithme (ou moyens) pour vérifier si deux variable SYSTEMTIME a un diff de 30 jours ou plus?30 jours Différence sur SYSTEMTIME
Merci
Je convert them to FileTime
et soustrayez les uns des autres.
La différence doit être supérieure à 30*24*60*60*10^7
.
Merci, mais pouvez-vous s'il vous plaît prendre une seconde pour expliquer le numéro '30 * 24 * 60 * 60 * 10^7' un peu? Je veux juste m'assurer que personne ne se trompe. –
@AllanJiang Il s'agit du nombre d'intervalles de 100 nanosecondes en 30 jours. ['FileTime'] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms724284.aspx) a une résolution de 100 nanosecondes, comme vous pouvez le découvrir en cliquant sur le lien. – GSerg
Je ferais très attention à utiliser^dans des langages basés sur C car c'est un xor logique, plutôt qu'une opération d'exposant! – Owl
Comme le MSDN page sur SYSTEMTIME
dit,
Il est déconseillé d'ajouter et de supprimer des valeurs dans la structure
SYSTEMTIME
pour obtenir des temps relatifs. Au lieu de cela, vous devez
- Convertir la structure
SYSTEMTIME
à une structureFILETIME
.- Copiez la structure
FILETIME
résultante dans une structureULARGE_INTEGER
.- Utilisez l'arithmétique 64 bits normale sur la valeur
ULARGE_INTEGER
.
SYSTEMTIME st1, st2;
/* ... */
FILETIME ft1, ft2;
ULARGE_INTEGER t1, t2;
ULONGLONG diff;
SystemTimeToFileTime(&st1, &ft1);
SystemTimeToFileTime(&st2, &ft2);
memcpy(&t1, &ft1, sizeof(t1));
memcpy(&t2, &ft2, sizeof(t1));
diff = (t1.QuadPart<t2.QuadPart)?(t2.QuadPart-t1.QuadPart):(t1.QuadPart-t2.QuadPart);
if(diff>(30*24*60*60)*10000000)
{
...
}
(erreur de manipulation sur les appels à SystemTimeToFileTime
omis par souci de concision)
A propos du (30*24*60*60)*10000000
: 30*24*60*60
est le nombre de secondes dans les 30 jours; 10000000
est le nombre de FILETIME
"ticks" dans une seconde (chaque tick FILETIME
est 100 ns = 10^2 * 10^-9 s = 10^-7 s).
Microsoft advises à
utiles pourraient être:
@Flimzy Je suppose que l'autre? – Anthony
Je convertirais probablement tous les deux en FILETIME et les comparerais ainsi. Vous utiliseriez la fonction SystemTimeToFileTime pour le faire, puis faites juste le calcul. –