TimeZonesView

Programmation d'applications complexes
Avatar de l’utilisateur
Philippe_GEORGES
Messages : 138
Inscription : mer. 28/janv./2009 13:28

TimeZonesView

Message par Philippe_GEORGES »

Bonjour à tous,

Sur le site nirsoft.net, on peut trouver un petit programme très pratique : timezonesview.exe

Ce programme permet d'obtnir les décallages horaires suivant l'heure d'été....etc.

Je souhaite faire la même application en Purebasic, avec la possibilité toutefois de choisir l'année, qui ne sera pas forcément celle en cours. (uniquement pour PC)

Si quelqu'un a une idée ou mieux, a déjà traité ce problème. Quelles sont les API à utiliser....

Merci d'avance,

Phil
Philippe GEORGES
"La simplicité est la sophistication suprême" (De Vinci)
assistance informatique, création de logiciels
georges.informatique@gmail.com
Mesa
Messages : 1126
Inscription : mer. 14/sept./2011 16:59

Re: TimeZonesView

Message par Mesa »

Il fut un temps où on pouvait telecharger une base de données de toutes les villes du monde (1G0 ! décompressée) avec leur coordonnées, leur heure d'été et leur fuseau.
C'était ici https://geonames.nga.mil/gns/html/cntyf ... 200713.zip

En cherchant bien...

M.
boddhi
Messages : 604
Inscription : lun. 26/avr./2010 16:14
Localisation : S 48° 52' 31'' / O 123° 23' 33''

Re: TimeZonesView

Message par boddhi »

Salut,

Jette un coup d'oeil à l'API SystemTimeToTzSpecificLocalTime

Note : Pour récupérer les infos du système courant, il y a GetTimeZoneInformation
Avatar de l’utilisateur
Micoute
Messages : 2583
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: TimeZonesView

Message par Micoute »

Bonjour Philippe_Georges, voilà ce que j'ai.

Code : Tout sélectionner

Procedure.s ZoneFuseau()
  ; Retourne le nom du fuseau horaire
  Protected TimeZoneInfo.TIME_ZONE_INFORMATION
  Protected i=0, NomStandard$=""
  GetTimeZoneInformation_(TimeZoneInfo)
  While TimeZoneInfo\StandardName[i]<>0 And i<=32
    NomStandard$ + Chr(TimeZoneInfo\StandardName[i])
    i + 1
  Wend
  ProcedureReturn NomStandard$
EndProcedure

Debug ZoneFuseau()
Dernière modification par Micoute le lun. 13/mai/2024 9:14, modifié 1 fois.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
Micoute
Messages : 2583
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: TimeZonesView

Message par Micoute »

Sinon, j'ai ça.

Code : Tout sélectionner

Procedure SiAnneeBissextile(Annee.q) ;Indique si l'année donnée est bissextile
    If ((Annee % 4) = 0)
      If (Annee % 100) Or ((Annee % 400) = 0)
        ProcedureReturn #True
      EndIf
    EndIf
  EndProcedure
  Procedure JoursDansMois(Annee, Mois) ;Retoure le nombre de jours dans le mois donné
    Select Mois
      Case 1,3,5,7,8,10,12
        ProcedureReturn 31
      Case 4,6,9,11
        ProcedureReturn 30
      Default
        ProcedureReturn 28 + SiAnneeBissextile(Annee)
    EndSelect
  EndProcedure
  Procedure.b JourDeSemaine(Date.q) ;Renvoie la valeur du jour dans la semaine de la date spécifiée (0 = dimanche, 6 = samedi).
    Protected Jours.q, joursemaine.b
    If (Date < 0)
      ProcedureReturn 0
    EndIf
    Jours = Date/24/60/60
    Jours + 1
    joursemaine = Jours % 7
    ProcedureReturn joursemaine
  EndProcedure
  Procedure TrouverQuatriemeDimanche(Annee,Mois)
    Protected Jour=22
    Protected DateQuatriemeDimanche=Date(Annee,Mois,Jour,0,0,0)
    
    ;Cherche le Quatrième dimanche
    While JourDeSemaine(DateQuatriemeDimanche)<>0
      
      Jour+1
      DateQuatriemeDimanche=Date(Annee,Mois,Jour,0,0,0)
    Wend
    
    ProcedureReturn DateQuatriemeDimanche
    
  EndProcedure
  Procedure TrouverDernierDimanche(Annee,Mois)
    Protected Jour=JoursDansMois(Annee, Mois) - 6
    Protected DateDernierDimanche=Date(Annee,Mois,Jour,0,0,0)
    
    ;Cherche le dernier dimanche
    While JourDeSemaine(DateDernierDimanche)<>0
      
      Jour+1
      DateDernierDimanche=Date(Annee,Mois,Jour,0,0,0)
    Wend
    ProcedureReturn DateDernierDimanche
    
  EndProcedure
  Procedure Heure_d_ete(Annee=-1) ;l'heure d'été commence toujours le dernier dimanche de mars
    Protected Resultat = TrouverDernierDimanche(Annee,3)
    If Resultat = -1
      Resultat = TrouverQuatriemeDimanche(Annee,3)
    EndIf  
    ProcedureReturn Resultat
  EndProcedure
  Procedure Heure_d_hiver(Annee=-1) ;l'heure d'hiver commence toujours le dernier dimanche d'octobre
    Protected Resultat
    Resultat = TrouverDernierDimanche(Annee,10)
    If Resultat = -1
      Resultat = TrouverQuatriemeDimanche(Annee,10)
    EndIf
    ProcedureReturn Resultat
  EndProcedure
  
  Debug FormatDate("%dd/%mm/%yyyy", Heure_d_ete(2024))
  Debug FormatDate("%dd/%mm/%yyyy", Heure_d_hiver(2024))
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
Philippe_GEORGES
Messages : 138
Inscription : mer. 28/janv./2009 13:28

Re: TimeZonesView

Message par Philippe_GEORGES »

Merci Micoute,

Mais si je veux les informations pour un autre point du globe ?

Si tu as une idée !

Phil
Philippe GEORGES
"La simplicité est la sophistication suprême" (De Vinci)
assistance informatique, création de logiciels
georges.informatique@gmail.com
Avatar de l’utilisateur
kernadec
Messages : 1606
Inscription : ven. 25/avr./2008 11:14

Re: TimeZonesView

Message par kernadec »

bjr Philippe
je connais bien ce problème de la gestion de la longitude.
alors voilà ce que je pense des fuseaux horaires :wink:

pour un thème Astral la domification doit tenir compte de la longitude qui peut nous faire modifié de plus ou moins 12 heures
les calculs de la domification du lieu.
donc il faut gérer le temps universel de la date de l heure et la longitude en degrés 12h/180deg en plus ou en moins des calculs horaires
En astrologie ce qui compte c'est l heure du soleil (GMT)

le problème en astrologie c' est que déjà la gestion de l heure d'été peut nous faire changer de date...et très souvent revenir
au jour d' avant pour les calculs de Domification.

Idem pour la longitude, perso je n utilise pas les fuseaux horaires qui ne servent que pour éviter les accidents de trains,
je préfère m'en passer car comme je l'ai dit auparavant la longitude peut atteindre
plus 12 heures en Est et moins 12 heures en Ouest
donc là aussi on peut se retrouver le jour d' avant ou le jour d'après pour les calculs du thème astral

Exemple pour le France entre les villes de Strasbourg long: 7.75 Est et de Brest: 4.486 Ouest
ce qui donnera une différence de longitude de: 12. 236 = 7.75 + 4.486
12 degrés 236 dec. il y auras des différences entre les Positions de la domification pour un thème qui a été établi pour Brest
et celui établi pour pour Strasbourg pour une date identique en heure d'hiver ou d'été.
je rappel que ces villes ont un fuseau horaire identique pour la France Paris (Greenwich) pour son heure légale

Donc tenir compte d'un fuseau horaire va réduire les différences.
mais la gestion du changement de plus ou moins 1 jour restera à gérer.
donc pas besoin de fuseau horaire pour le calcul d'un thème astral
il faut gérer en amont tous ces décalage horaires de date d' heure légale et de longitude.
et ainsi obtenir la date et l'heure du calcul du thème dans les éphémérides
Il est important de se rappeler que c'est la verticale du lieu qui compte pour établir un thème astral complet.

Cordialement
Avatar de l’utilisateur
Philippe_GEORGES
Messages : 138
Inscription : mer. 28/janv./2009 13:28

Re: TimeZonesView

Message par Philippe_GEORGES »

Merci Kernadec !!

Je sais, je suis d'accord avec toi ! Le problème de l'heure d'été est aussi un souci majeur. Simplement, l'heure d'été ne s'applique par partout, d'où l'utilité de ce petit programme pour savoir s'il faut ou non supprimer une heure !

C'est pour cette raison que je m'interrogeais sur ce point !

Voilà.

Phil
Philippe GEORGES
"La simplicité est la sophistication suprême" (De Vinci)
assistance informatique, création de logiciels
georges.informatique@gmail.com
Répondre