Page 1 sur 2

[R] Heure et point de restauration

Posté : sam. 04 mai 2013 09:32
par Amesamana
Bonjour,

Me voici avec une nouvelle question :mrgreen:

Je ne comprend pas pourquoi je me retrouve avec un décalage de 2 heures en exécutant un point de restauration.
L'heure affichée correspond à l'heure solaire.

Code : Tout sélectionner

Func  _SystemRestoreControl ( $discription = True )
    $obj = ObjGet ( "winmgmts:{impersonationLevel = impersonate}!root/default:SystemRestore" )
    $obj.Enable ( "" )
    $obj.CreateRestorePoint ( $discription , 12 , 100 )
EndFunc

Code : Tout sélectionner

_SystemRestoreControl("Point de restauration avec ToolsDiag le " & $Now, 1)
Voici ce que cela me donne

Code : Tout sélectionner

Point de restauration avec ToolsDiag le 04/05/2013 09:16:12 Créé le : 05/04/2013 07:16:12
La date en premier indiqué par $now me donne la bonne heure mais ensuite vient se greffer l'heure décalée de 2 heures.
De plus : Crée le : n'est pas inclus dans le code, je suppose que c'est normal, le système doit le créer automatiquement, mais pourquoi un décalage deux heures ?

Si je fait avec cette ligne

Code : Tout sélectionner

_SystemRestoreControl("Point de restauration avec ToolsDiag le ")
J'obtiens un décale 07:17 au lieu de 09:17

Code : Tout sélectionner

Point de restauration avec ToolsDiag le Créé le : 05/04/2013 07:17:25
Ce qui me semble logique puisque je supprime $now.
Il y a t'il une solution pour éviter cette affichage supplémentaire ?

Merci :)

Re: [..] Heure et point de restauration

Posté : sam. 04 mai 2013 12:24
par jchd
Heure locale - heure UTC = 2 heures (actuellement)

Re: [..] Heure et point de restauration

Posté : sam. 04 mai 2013 14:28
par Amesamana
Oui heure solaire, mais que faire pour ne pas l'afficher ?

Re: [..] Heure et point de restauration

Posté : sam. 04 mai 2013 15:35
par BoufTout
Je pense que tu peu simplement ajouté 2 a l'heur affiché ... (je suis débutant donc c'est juste une petite idée)

Re: [..] Heure et point de restauration

Posté : sam. 04 mai 2013 16:45
par jchd
Il te faut convertir tes dates-heures en temps local au moment considéré. La différence entre UTC et temps local est variable (heure d'été/hiver), donc on ne peut pas simplement ajouter ou retrancher une quantité fixe. De plus, l'heure locale varie (évidemment) avec l'endroit que l'on considère comme "local" pour l'action datée. Par exemple, si tu souhaites afficher l'heure "locale" (de Hong-Kong) à la quelle ton correspondant de Hong-Kong t'a envoyé cet e-mail.

L'heure "solaire" n'est plus employée car désynchronisée des standards en cours (ex.: "leap seconds").

On peut recourir à _Date_Time_EncodeFileTime() puis _Date_Time_FileTimeToLocalFileTime() puis _Date_Time_FileTimeToArray() puis formatage selon besoin. Il y a certainement mieux en tapant dans l'API Windows directement, mais la séquence proposée devrait être correcte (SGDMVP).

Re: [..] Heure et point de restauration

Posté : sam. 04 mai 2013 17:32
par BoufTout
je sais que se n'est pas mon sijet, mais vue que j'apprend, je regarde tout ...

Mais voila on sait que : Temps légal en France (TL)= TU+2H en été, et à TU+1H en hiver.
Soit: TL = TU + m avec m= 2H en été et m=1H en hiver... (sources : http://userpages.irap.omp.eu/~jprieur/c ... ans_f.html)
Peut on crée un formule avec des conditions ... :

if $date < $date_hd & $date > $date_he Then
$heur_affich = $heur+1
else
$heur_affich = $heur+2
EndIf

Apres les (formules) restent optionnels, mais, l'idée de base pourrais fonctionner ?

Edite : je vien de lire pour la situation géographique, donc je doit mal me diriger ... (a moin que l'on crée un GUI en demandant le lieu ... non ?)

Re: [..] Heure et point de restauration

Posté : sam. 04 mai 2013 19:01
par jchd
L'idée, quand on fait une fonction, est de la rendre la plus générale possible et la plus résistante en cas de changements extérieurs. Ainsi elle pourra être ré-employée comme une brique logicielle dans toutes les situations.

Ton ajustement n'est valable que pour quelques pays du fuseau de Paris, qui appliquent le même changement d'heure aux mêmes dates que la France, tant que les règles de changement d'heure ne changent pas elles-mêmes et aussi tant que les fuseaux horaires ne changent pas. Chacun de ces paramètres ont évolué de très nombreuses fois dans le temps et selon le lieu. Tout emploi de cette fonction en dehors de toutes ces conditions réunies est condamné à produire des erreurs difficiles à détecter après coup, d'où un coût de maintenance rédhibitoire.

Pour cette raison, utiliser des fonctions reposant sur des primitives implémentées au niveau du système est énormément plus robuste et utilisable en tout points du globe, tant que le système est correctement mis à jour. Cette dernière condition est bien moins restrictive que les précédentes.

Re: [..] Heure et point de restauration

Posté : sam. 04 mai 2013 23:58
par mikell
Un petit script à base de WMI qui compare Win32_LocalTime et Win32_UTCTime permet d'avoir l'info, avec toujours cette incertitude des comparaisons de dates, où on espère que la milliseconde où se fera la comparaison ne sera pas celle que choisira le PC pour passer à la minute ou à l'heure suivante...
► Afficher le texte

Re: [..] Heure et point de restauration

Posté : dim. 05 mai 2013 01:41
par jchd
Certes Mikell, mais ton approche ne fournit que la différence LT à UTC au moment de la demande. S'il s'agit d'un timbre à date antérieur (ou postérieur d'ailleurs), il faut vérifier si l'on est dans le même horaire (été/hiver) et s'assurer qu'il y a bien un décalage d'horaire en vigueur au moment du timbre à date.

Re: [..] Heure et point de restauration

Posté : dim. 05 mai 2013 06:31
par mikell
Oui, c'était juste pour répondre à une partie de la question sur le décalage horaire... pour une date passée ou future c'est une autre paire de manches et là impossible de se passer des fonctions Time tarabiscotées (c'est pas pour rien que l'include Date fait 130 Ko)

Re: [..] Heure et point de restauration

Posté : dim. 05 mai 2013 10:27
par Amesamana
Bonjour à tous,

merci pour vos réponses :wink:

Code : Tout sélectionner

Global $Now = @MDAY & "/" & @MON & "/" & @YEAR & " " & @HOUR & ":" & @MIN & ":" & @SEC
_SystemRestoreControl("Point de restauration avec ToolsDiag le " & $Now, 1)
$Now me donne la bonne date et heure, ce que je ne comprends pas, c'est pourquoi vient de greffer l'heure UTC.
Je ne demande pas dans le script l'heure UTC.

Alors pourquoi cette heure s'affiche ?

Point de restauration avec ToolsDiag le 04/05/2013 09:16:12 Créé le : 05/04/2013 07:16:12

Re: [..] Heure et point de restauration

Posté : dim. 05 mai 2013 11:36
par jchd
A quoi correspond ce que tu as mis en bleu ?

L'heure locale c'est ça :

Code : Tout sélectionner

#include <Date.au3>
ConsoleWrite(_NowCalc() & @TAB & _Now() & @LF)
 

Re: [..] Heure et point de restauration

Posté : dim. 05 mai 2013 12:07
par mikell
Ce qu'il a mis en bleu, c'est ce que Windows rajoute automatiquement sans demander son avis :mrgreen:

Re: [..] Heure et point de restauration

Posté : dim. 05 mai 2013 15:46
par jchd
Serait-ce à dire que _SystemRestoreControl exprime l'heure en UTC (ce qui est parfaitement logique) ?
En quoi est-ce surprenant ?

Re: [..] Heure et point de restauration

Posté : dim. 05 mai 2013 19:39
par Amesamana
Surprenant surement pas :mrgreen:

Je voulais juste virer cette heure et afficher l'heure local.
mikell a écrit :Ce qu'il a mis en bleu, c'est ce que Windows rajoute automatiquement sans demander son avis :mrgreen:
Sais tu pourquoi Windows ajoute l'heure sur un script AutoIt, sans que cela lui soit demandé ?
De plus pourquoi il rajoute l'heure en UTC alors qu'il intègre bien la bonne heure (local) quand je vérifie dans la restauration système.
En utilisant le script avec cette ligne sans $Now
_SystemRestoreControl("Point de restauration avec ToolsDiag : ")
Affichage avec AutoIt :

Code : Tout sélectionner

 Point de restauration avec ToolsDiag :  Créé le : 05/05/2013 17:06:27

Affichage dans la restauration système :

Image

Heure local dans la restauration et UTC dans l'affichage de AutoIt ?

Ou alors comme tu dis jchd, c'est _SystemRestoreControl qui rajoute Créé le : 05/05/2013 17:06:27

Re: [..] Heure et point de restauration

Posté : dim. 05 mai 2013 20:20
par jchd
Mais d'où provient donc cette fonction _SystemRestoreControl() ?

Re: [..] Heure et point de restauration

Posté : dim. 05 mai 2013 22:05
par Amesamana
jchd a écrit :Mais d'où provient donc cette fonction _SystemRestoreControl() ?
Je ne sais plus mais comme _CreateSystemRestorePoint ou encore _SR_CreateRestorePoint qui m'affiche également l'heure en UTC

Donc je ne peux empêcher cette affichage d'heure ?

Re: [..] Heure et point de restauration

Posté : lun. 06 mai 2013 08:21
par jchd
C'est pourtant là qu'il faut regarder. Cette fonction ne tombe pas toute seule de la planète Mars. Tu dois bien avoir un #include non standard où la pêcher !

Re: [..] Heure et point de restauration

Posté : lun. 06 mai 2013 09:53
par Amesamana
Non rien de spéciale, et ça ne doit pas venir de mars, il faut que j'inclue :

Code : Tout sélectionner

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
 
Mis à part ces deux là ?

Si j'utilise les fonctions des liens que je t'ai donné c'est idem pourtant pas de #include non standard.

Re: [..] Heure et point de restauration

Posté : lun. 06 mai 2013 13:30
par Tlem
Si je ne m'abuse, le PC enregistre toujours les informations par rapport à l'heure UTC. C'est Windows qui interprète bêtement l'heure locale.
Si vous désactivez la fonctionnalité de l'heure d'été dans Windows, vous verrez que vous n'aurez plus de problème. :D
C'est le même problème avec certains logiciels de sauvegarde qui ne prenne pas en compte ce genre de considération ...

Pour résoudre votre problème, vous devez modifier l'UDF pour qu'il prenne en compte l'heure en fonction du fuseau horaire et si prise en charge de l'heure d'été, car la plupart des UDFs que vous trouverez sur le forum US, travaillent en UTF et n'ont que faire de l'heure d'été. ^^