Page 1 sur 1

[R] Fonction _Date_Time_CompareFileTime

Posté : mar. 28 juin 2016 09:25
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

Re: [..] Fonction _Date_Time_CompareFileTime

Posté : mar. 28 juin 2016 13:38
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]

Re: [..] Fonction _Date_Time_CompareFileTime

Posté : mar. 28 juin 2016 15:42
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

Re: [..] Fonction _Date_Time_CompareFileTime

Posté : mar. 28 juin 2016 16:26
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.

Re: [..] Fonction _Date_Time_CompareFileTime

Posté : mar. 28 juin 2016 17:01
par jchd
Windows n'utilise pas les mêmes structures pour les deux encodages qu'il a inventé.

Re: [R] Fonction _Date_Time_CompareFileTime

Posté : ven. 01 juil. 2016 17:45
par jpascal
Merci pour la réponse.