IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scripts/Batch Discussion :

Calculs de décalage horaire [Batch]


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Bragu Demon
    Homme Profil pro
    Intégrateur d'Explopitation
    Inscrit en
    Juin 2013
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Intégrateur d'Explopitation
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2013
    Messages : 125
    Par défaut Calculs de décalage horaire
    Bonjour à tous,

    Je travaille sur un script qui est supposé m'afficher dans le tableau d'une page html l'heure et la date (entre autre) en Guadeloupe/Martinique et à la Réunion .

    Ma page est générée par batch (d'ailleurs si vous savez envoyer le caractère %, ça m'aidera aussi, parce qu'avec ça : echo ^% ou ^^% ne fonctionne pas)

    Comme il y a des changements d'heure , je me demandais quelle serait la meilleure solution pour toujours avoir la bonne heure, en n'utilisant de préférence qu'un seul batch.


    J'avais songer à utiliser l'heure GMT mais je ne sais pas comment générer cette heure en batch natif ou vbs.


    Merci pour vos commentaires

  2. #2
    Membre confirmé Avatar de Bragu Demon
    Homme Profil pro
    Intégrateur d'Explopitation
    Inscrit en
    Juin 2013
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Intégrateur d'Explopitation
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2013
    Messages : 125
    Par défaut
    En recherchant, j'ai trouvé un vbs sur le site Rob Van De Woude (très fourni en script en tout genre) qui permet de retourner l'heure GMT :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    Option Explicit
     
    Dim dtmDate, dtmGMT
    Dim colItems, objItem, objWMIService
    Dim strArg, strDate
    
    dtmDate = Now
    
    If WScript.Arguments.Named.Count   > 0 Then Syntax
    If WScript.Arguments.Unnamed.Count > 0 Then
    	For Each strArg In WScript.Arguments.Unnamed
    		strDate = Trim( strDate & " " & strArg )
    	Next
    	On Error Resume Next
    	If IsDate( strDate ) Then
    		dtmDate = CDate( strDate )
    	Else
    		Syntax
    	End If
    	On Error Goto 0
    End If
    
    
    
    Set objWMIService = GetObject( "winmgmts://./root/cimv2" )
    Set colItems = objWMIService.ExecQuery( "SELECT * FROM Win32_TimeZone", , 48 )
    For Each objItem in colItems
    	dtmGMT = DateAdd( "n", - objItem.Bias, dtmDate )
    	If isDST( dtmDate ) Then
    		dtmGMT = DateAdd( "n", objItem.DaylightBias, dtmGMT )
    	End If
    Next
    Set colItems = Nothing
    Set objWMIService = Nothing
    
    WScript.Echo dtmGMT & " GMT"
    
    
    Function isDST( myDate )
    ' Returns TRUE if the specified date is in daylight Saving Time, or FALSE if not.
    ' The function ignores the 'ambiguous hour' right after the Standard Time transition.
    	Dim myDay, myHour, myMinute, myMonth, myYear
    	Dim intDaylight, intLocDate, intStandard
    	Dim colItems, objItem, objWMIService
    
    	' Parse the specified date/time
    	myDate   = CDate( myDate )
    	myDay    = DatePart( "d",    myDate )
    	myMonth  = DatePart( "m",    myDate )
    	myYear   = DatePart( "yyyy", myDate )
    	myHour   = DatePart( "h",    myDate )
    	myMinute = DatePart( "n",    myDate )
    
    	Set objWMIService = GetObject( "winmgmts://./root/cimv2" )
    	Set colItems = objWMIService.ExecQuery( "SELECT * FROM Win32_TimeZone", , 48 )
    
    	For Each objItem in colItems
    		With objItem
    			' Convert the Daylight Start date/time, specified date/time and Standard Start date/time to long integers (YYYYMMDDHHmm)
    			intDaylight = .DaylightMinute + 100 * .DaylightHour + 10000 * LastDoW( .DaylightDayOfWeek, .DaylightMonth, myYear, .DaylightDay ) + 1000000 * .DaylightMonth + 100000000 * myYear
    			intLocDate  =  myMinute       + 100 *  myHour       + 10000 * myDay                                                               + 1000000 *  myMonth       + 100000000 * myYear
    			intStandard = .StandardMinute + 100 * .StandardHour + 10000 * LastDoW( .StandardDayOfWeek, .StandardMonth, myYear, .StandardDay ) + 1000000 * .StandardMonth + 100000000 * myYear
    		End With
    	Next
    
    	Set colItems = Nothing
    	Set objWMIService = Nothing
    
    	' Now that we have the long integers for the date/times, the actual comparison is quite straightforward
    	If intLocDate < intDaylight Then
    		isDST = False
    	ElseIf intLocDate >= intStandard Then
    		isDST = False
    	Else
    		isDST = True
    	End If
    End Function
    
    
    Function LastDoW( myDoW, myMonth, myYear, myWoM )
    ' Returns the day of the month for the specified week day, month, year and week of month
    ' e.g. LastDoW( 0, 3, 2011, 5 ) will return the last (5) Sunday (0) of March (3) 2011, which is 27
    	Dim i, j
    	j = 0
    	LastDoW = 0
    	For i = 1 To 31
    		If myWoM > j Then
    			If IsDate( myYear & "-" & myMonth & "-" & i ) Then
    				If DatePart( "w", CDate( myYear & "-" & myMonth & "-" & i ), vbSunday ) = myDoW + 1 Then
    						j = j + 1
    						LastDoW = i
    				End If
    			End If
    		End If
    	Next
    End Function
    
    
    Sub Syntax
    	Dim strMsg
    	strMsg = vbCrLf _
    	       & "GMT.vbs,  Version 1.10" _
    	       & vbCrLf _
    	       & "Return the GMT time and date for the current or specified local time and date" _
    	       & vbCrLf & vbCrLf _
    	       & "Usage:  GMT.VBS  [ date time ]" _
    	       & vbCrLf & vbCrLf _
    	       & "Notes:" & vbTab & "If no date/time is specified, the current date/time is assumed." _
    	       & vbCrLf _
    	       & "      " & vbTab & "DST is checked according to the timezone rules for the current" _
    	       & vbCrLf _
    	       & "      " & vbTab & "year, as found in the registry, but the 'ambiguous hour' right" _
    	       & vbCrLf _
    	       & "      " & vbTab & "after the transition to Standard Time is ignored." _
    	       & vbCrLf & vbCrLf _
    	       & "Written by Rob van der Woude" _
    	       & vbCrLf _
    	       & "http://www.robvanderwoude.com"
    	WScript.Echo strMsg
    	WScript.Quit 1
    End Sub
    Je vais donc voir dans un premier temps ce que cela peut donner.

  3. #3
    Expert confirmé
    Avatar de hackoofr
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2009
    Messages
    3 844
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 844
    Par défaut

    Pouvez-vous poster votre code Batch ?

  4. #4
    Membre confirmé Avatar de Bragu Demon
    Homme Profil pro
    Intégrateur d'Explopitation
    Inscrit en
    Juin 2013
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Intégrateur d'Explopitation
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2013
    Messages : 125
    Par défaut
    Citation Envoyé par hackoofr Voir le message
    Pouvez-vous poster votre code Batch ?
    Ca peut aider en effet


    Voici le code qui génère ma page :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    echo ^<^^!DOCTYPE HTML PUBLIC "-^/^/W3C^/^/DTD HTML 4.01 Strict^/^/EN" > U:\Page.html
    echo         "http://www.w3.org/TR/html4/strict.dtd"^> >> U:\Page.html
    
    :: Titre de l'onglet
    echo ^<html^> >> U:\Page.html
    echo ^<title^>Site^<^/title^> >> U:\Page.html
    echo ^<body^> >> U:\Page.html
    echo ^<p align=center^> >> U:\Page.html
    echo ^<font size="5" color="black"^> >> U:\Page.html
    :: Entête du tableau
    echo Supervision &agrave; Site >> U:\Page.html
    echo ^<^/font^>^<^/p^> >> U:\Page.html
    
    :: Création du tableau général
    echo ^<table border="0" align=center width=600^> >> U:\Page.html
    echo ^<tr^>^<td^> >> U:\Page.html
    :: date()
    :: time() 
    :: Création du tableau des infos journalières (date, numéro de la semaine, quantième, Incldate)
    echo ^<table border="0" align=left^> >> U:\Page.html
    echo  ^<tr align=Left^>^<td width=100^>Date^<^/td^>^<td width=100^>%DateT%^<^/td^>^<^/tr^> >> U:\Page.html
    echo  ^<tr align=Left^>^<td width=100^>Semaine^<^/td^>^<td width=100^>%Semaine%^<^/td^>^<^/tr^> >> U:\Page.html
    echo  ^<tr align=Left^>^<td width=100^>Quantième^<^/td^>^<td width=100^>%Quant%^<^/td^>^<^/tr^> >> U:\Page.html
    echo  ^<tr align=Left^>^<td width=100^>Incldate^<^/td^>^<td width=100^>D%quant%%AA%%iatime%^<^/td^>^<^/tr^> >> U:\Page.html
    echo ^<^/table^> >> U:\Page.html
    echo ^<^/td^>^<^/tr^> >> U:\Page.html
    
    echo ^<table^> >> U:\Page.html
    echo ^<br^>^<br^> >> U:\Page.html
    echo ^</table^> >> U:\Page.html
    
    echo ^<tr^>^<td^> >> U:\Page.html
    
    :: Création du Tableau de supervision sur le site
    echo ^<table border="1" align=center^>  >> U:\Page.html
    echo ^<tr align=center^>^<td width=100^>Code 1^<^/td^>^<td width=100^>Code 2^<^/td^>^<td width=100^>Code 3^<^/td^>^<td width=100^>Code 4^<^/td^>^<td width=200^>Nom complet^<^/td^> ^<^/tr^> >> U:\Page.html
    
    
    :: Création d'un fichier pour la prod à Site
    FOR /F "tokens=1-6 delims= " %%a in (U:\Prod.txt) DO (
    set Lpart=%%a
    set Rdy=%%b
    set NomCR=%%c
    set CodeAD=%%d
    set CodeCR=%%e
    set Env=%%f
    
    if !Env!==P echo ^<tr align=center^>^<td^>!Lpart!^<^/td^>^<td^>!Rdy!^<^/td^>^<td^>!CodeAD!^<^/td^>^<td^>!CodeCR!^<^/td^>^<td^>!NomCR!^<^/td^>^<^/tr^> >> U:\Page.html
    
    )
    
    :: Décalages horaires : 
    :: Réunion    : +2 heures en été et +3 heures en hiver 
    :: Guadeloupe : -6 heures en été et -5 heures en hiver
    :: Martinique : -6 heures en été et -5 heures en hiver
    :: La commande wmic timezone get /FORMAT:list permet de récupérer le nom du fuseau horaire
    
    
    echo ^<^/td^>^<^/tr^> >> U:\Page.html
    echo ^<^/table^> >> U:\Page.html
    
    echo ^<^/td^>^<^/tr^> >> U:\Page.html
    echo ^<^/table^> >> U:\Page.html
    
    echo ^<^/body^> >> U:\Page.html
    echo ^<^/html^> >> U:\Page.html
    L'idée d'afficher les % serait pour remplacer les <td width=100> par <td width=10%>, mais comme dit précédemment, j'ai essayé plusieurs solution est mon batch est systématiquement arrêté car je n'arrice pas à échapper correctement le %


    Le fichier U:\Prod.txt est de cette forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CRD8 CRIV Ille-et-Vilaine IV CR836 P 
    CRD4 CRGU Guadeloupe GU CR900 P
    Merci de tes remarques

  5. #5
    Membre Expert
    Inscrit en
    Avril 2010
    Messages
    1 495
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 1 495
    Par défaut
    Salut,

    Tu peux rester sur du script cmd et générer une page HTML dynamique avec du javascript, pour récupérer et formater tes données.
    Sinon, passer à vbscript, gérer tout en interne, et produire une page statique.

    Pour récupérer l'heure, l'idéal serait d'interroger directement des serveurs de temps web, de la sorte t'as plus à te soucier de l'heure d'été ou d'hiver.

    Pour échapper "%", il faut le doubler "%%".

  6. #6
    Membre Expert
    Inscrit en
    Avril 2010
    Messages
    1 495
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 1 495
    Par défaut
    je viens de lire ton code,

    sache que tu peux le rendre plus facile à lire avec une écriture sous cette forme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    set html_file=.........
    (
    set /p ="</td></tr>"<nul 
    set /p ="</table>"<nul
    set /p ="</td></tr>"<nul
    set /p ="</table>"<nul
    set /p ="</body>"<nul
    set /p ="</html>"<nul
    )>>"%htlm_file%"
    avec les sauts de lignes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set /p ="</td></tr>"<nul& echo.
    ou encore tu copies tout dans un fichier, et tu utilises la commande "copy +"

    ou encore tu fais tout ce qui faut dans un seul et unique fichier html, et tu utilises ajax.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Calculer un décalage horaire
    Par AQkinkin dans le forum C++
    Réponses: 5
    Dernier message: 31/03/2014, 10h29
  2. Calcul de décalage horaire
    Par zwaldo dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 11/04/2010, 15h59
  3. calcul décalage horaire
    Par totor92290 dans le forum Requêtes et SQL.
    Réponses: 0
    Dernier message: 23/02/2010, 18h08
  4. Décalage horaire par rapport à l'heure GMT
    Par Pasqualini dans le forum C++Builder
    Réponses: 5
    Dernier message: 19/07/2006, 09h28
  5. Calcul de tranches horaires
    Par zach dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 02/08/2005, 08h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo