[R] Fonction _Date_Time_CompareFileTime

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
jpascal
Niveau 6
Niveau 6
Messages : 239
Enregistré le : jeu. 16 oct. 2008 16:21
Status : Hors ligne

[R] Fonction _Date_Time_CompareFileTime

#1

Message par jpascal »

Bonjour,

Je ne comprends pas le fonctionnement de cette fonction.

Lorsque je teste une date antérieure dans le même mois, j'obtiens bien le code retour -1.
Lorsque je teste une date postérieure dans le même mois, j'obtiens bien le code retour 1.
Si je compare à une date du mois prochain j'obtiens -1 au lieu de 1 ??

Code : Tout sélectionner

ConsoleWrite(_Date_Time_CompareFileTime(EncodeDate('20/06/2016'), EncodeDate(@MDAY & "/" & @MON & "/" & @YEAR)) & @CRLF & @CRLF)
ConsoleWrite(_Date_Time_CompareFileTime(EncodeDate('30/06/2016'), EncodeDate(@MDAY & "/" & @MON & "/" & @YEAR)) & @CRLF & @CRLF)
ConsoleWrite(_Date_Time_CompareFileTime(EncodeDate('01/07/2016'), EncodeDate(@MDAY & "/" & @MON & "/" & @YEAR)) & @CRLF & @CRLF)

Func EncodeDate($sDate)
	Local $aTime = StringRegExp($sDate, '(\d{2})/(\d{2})/(\d{4})', $STR_REGEXPARRAYGLOBALMATCH)
	If @error Then Exit
	ConsoleWrite($aTime[1] & '/' & $aTime[0] & '/' & $aTime[2] & @CRLF)
	Return _Date_Time_EncodeSystemTime($aTime[1], $aTime[0], $aTime[2])
EndFunc   ;==>EncodeDate
Modifié en dernier par jpascal le ven. 01 juil. 2016 17:44, modifié 1 fois.
AutoIt 3.3.16.1 - AutoIt3Wrapper 21.316.1639.1
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: [..] Fonction _Date_Time_CompareFileTime

#2

Message par orax »

En effet, le comportement de la fonction est étrange... :?

[codeautoit]#include <date.au3>
#include <debug.au3>

_Assert('_compare(27, 06, 2016) = -1', False)
_Assert('_compare(28, 01, 2016) = -1', False)
_Assert('_compare(28, 06, 2010) = -1', False)
_Assert('_compare(27, 01, 2010) = -1', False)
_Assert('_compare(28, 01, 2010) = -1', False)
_Assert('_compare(29, 01, 2010) = -1', False) ; ERREUR
_Assert('_compare(01, 01, 1980) = -1', False)

_Assert('_compare(28, 06, 2016) = 0', False)

_Assert('_compare(29, 06, 2016) = 1', False)
_Assert('_compare(28, 07, 2016) = 1', False)
_Assert('_compare(28, 06, 2017) = 1', False)
_Assert('_compare(29, 06, 2017) = 1', False)
_Assert('_compare(29, 07, 2017) = 1', False)
_Assert('_compare(01, 07, 2017) = 1', False) ; ERREUR
_Assert('_compare(01, 01, 2017) = 1', False) ; ERREUR

Func _compare($iDay, $iMonth, $iYear)
Local $tDate1 = _Date_Time_EncodeSystemTime($iMonth, $iDay, $iYear)
Local $tDate2 = _Date_Time_EncodeSystemTime(06, 28, 2016)

Return _Date_Time_CompareFileTime($tDate1, $tDate2)
EndFunc ;==>_compare[/codeautoit]
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2282
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [..] Fonction _Date_Time_CompareFileTime

#3

Message par jchd »

La fonction est correcte : il suffit d'employer les bons paramètres.

Code : Tout sélectionner

ConsoleWrite(_Date_Time_CompareFileTime(EncodeDate('20/06/2016'), EncodeDate(@MDAY & "/" & @MON & "/" & @YEAR)) & @CRLF & @CRLF)
ConsoleWrite(_Date_Time_CompareFileTime(EncodeDate('30/06/2016'), EncodeDate(@MDAY & "/" & @MON & "/" & @YEAR)) & @CRLF & @CRLF)
ConsoleWrite(_Date_Time_CompareFileTime(EncodeDate('01/07/2016'), EncodeDate(@MDAY & "/" & @MON & "/" & @YEAR)) & @CRLF & @CRLF)

Func EncodeDate($sDate)
   Local $aTime = StringRegExp($sDate, '(\d{2})/(\d{2})/(\d{4})', $STR_REGEXPARRAYGLOBALMATCH)
   If @error Then Exit
   ConsoleWrite($aTime[1] & '/' & $aTime[0] & '/' & $aTime[2] & @CRLF)
;~    Return _Date_Time_EncodeSystemTime($aTime[1], $aTime[0], $aTime[2])		; certainement pas ça !
   Return _Date_Time_EncodeFileTime($aTime[1], $aTime[0], $aTime[2])
EndFunc   ;==>EncodeDate
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
jpascal
Niveau 6
Niveau 6
Messages : 239
Enregistré le : jeu. 16 oct. 2008 16:21
Status : Hors ligne

Re: [..] Fonction _Date_Time_CompareFileTime

#4

Message par jpascal »

Au temps pour moi.
Mais en lisant l'aide, je n'ai pas compris la différence entre les deux.

Si encore la fonction _Date_Time_EncodeSystemTime ne demandait pas de paramètre, je comprendrais mais là...
C'est plus évident pour les fonctions _Date_Time_GetFileTime et _Date_Time_GetSystemTime.
AutoIt 3.3.16.1 - AutoIt3Wrapper 21.316.1639.1
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2282
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [..] Fonction _Date_Time_CompareFileTime

#5

Message par jchd »

Windows n'utilise pas les mêmes structures pour les deux encodages qu'il a inventé.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
jpascal
Niveau 6
Niveau 6
Messages : 239
Enregistré le : jeu. 16 oct. 2008 16:21
Status : Hors ligne

Re: [R] Fonction _Date_Time_CompareFileTime

#6

Message par jpascal »

Merci pour la réponse.
AutoIt 3.3.16.1 - AutoIt3Wrapper 21.316.1639.1
Répondre