Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3127 connectés 

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  UTC en heure légale

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

UTC en heure légale

n°2254484
FerLio
Posté le 30-03-2015 à 11:30:50  profilanswer
 

Bonjour,
 
Novice en programmation shell, je me tourne vers le forum pour avoir de l'aide.
 
J'ai un fichier xml où toutes les dates du fichiers sont en Temps universel, je voudrais les convertir en heure légale automatiquement est-ce possible ?
 
Merci

mood
Publicité
Posté le 30-03-2015 à 11:30:50  profilanswer
 

n°2254489
gilou
Modérateur
Modzilla
Posté le 30-03-2015 à 11:48:56  profilanswer
 

Oui, c'est faisable.
Elles sont entre des tags spécifiques, tes dates?
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2254507
FerLio
Posté le 30-03-2015 à 14:49:51  profilanswer
 

Voici un aperçu du fichier :
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE opalXML:opalXML SYSTEM "opalxml3.dtd">
<opalXML:opalXML>
 <opalXML:CONFIGURATION date="2014-12-10 09:36:06">
  <opalXML:STATIONGROUP Name="ADOUR MOYEN">
   <opalXML:STATION Id="-32767" Name="Aire">
    <opalXML:SENSOR Id="34" Name="" Type="2">
    </opalXML:SENSOR>
</opalXML:CONFIGURATION>
 <opalXML:MEASURELIST date="2014-12-10 09:36:06">
  <opalXML:MEASURE TS="2014-12-10 09:15:00" Type="limni" Station="Aire" Value="1.221" />
  <opalXML:MEASURE TS="2014-12-10 09:30:00" Type="limni" Station="Aire" Value="1.219" />
---------------------------------------
En bref, j'aimerais convertir en heure léhale les dates des attibuts "date" et "TS" actuellement en temps universel. J'espère que ça illustre m'a demande correctement.
 
Merci
 

n°2254657
gilou
Modérateur
Modzilla
Posté le 31-03-2015 à 17:44:37  profilanswer
 

En perl, on pourrait faire ainsi:
 

Code :
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use autodie;
  5. use Time::Local;
  6.  
  7.  
  8. sub UTC2local {
  9.  my $name = shift;
  10.  # conversion en nombre de secondes depuis 'the epoch', le zero de référence unix/linux avec timegm
  11.  # puis reconversion en temps local (en fonction de la timezone de la machine ou s'exécute le script) avec localtime
  12.  my ($sec, $min, $hour, $day, $month, $year) = (localtime(timegm(@_)))[0..5];
  13.  $year += 1900;
  14.  $month++;
  15.  return (sprintf("%s=\"%04d-%02d-%02d %02d:%02d:%02d\"", $name, $year, $month, $day, $hour, $min, $sec));
  16. }
  17.  
  18. open my $fhin, "<", "utc.txt";
  19. open my $fhout, ">", "ltc.txt";
  20. while (<$fhin> ) {
  21.  s/(?<=\s)(date|TS)="(\d{4})\-(\d{2})-(\d{2})\s(\d{2}):(\d{2}):(\d{2})"/UTC2local($1, $7, $6, $5, $4, $3 - 1, $2)/ge;
  22.  print $fhout $_;
  23. }
  24. close $fhout;
  25. close $fhin;


Il y a probablement moyen de ne pas passer le nom de l'attribut à UTC2local, si on veut optimiser.
 
EDIT: Une version un poil plus optimale:

Code :
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use autodie;
  5. use Time::Local;
  6.  
  7. sub UTC2local {
  8.  # conversion en nombre de secondes depuis 'the epoch', le zero de référence unix/linux
  9.  # puis reconversion en temps local (en fonction de la timezone de la machine ou s'exécute le script)
  10.  my @ltime = reverse((localtime(timegm(reverse(@_))))[0..5]);
  11.  # reverse en entrée et sortie parce que timegm et localtime sont dans l'ordre (sec, min, hour, day, month, year)
  12.  $ltime[0] += 1900; # car localtime retourne le nb d'annes depuis 1900
  13.  $ltime[1]++; # pour repasser de mois variant de 0 a 11 a des mois variant de 1 a 12
  14.  return sprintf("%04d-%02d-%02d %02d:%02d:%02d", @ltime);
  15. }
  16.  
  17. open my $fhin, "<", "utc.txt";
  18. open my $fhout, ">", "ltc.txt";
  19. while (<$fhin> ) {
  20.  # $3 - 1  car les mois utilisés par localtime et timegm varient entre 0 et 11
  21.  s/(?<=\s)(TS|date)="(\d{4})\-(\d{2})-(\d{2})\s(\d{2}):(\d{2}):(\d{2})"/"$1=\"".UTC2local($2, $3 - 1, $4, $5, $6, $7).'"'/ge;
  22.  print $fhout $_;
  23. }
  24. close $fhout;
  25. close $fhin;


 
A+,


Message édité par gilou le 01-04-2015 à 00:46:07

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

  UTC en heure légale

 

Sujets relatifs
boutons ajout date et heure actuelle si la case est vide (excel)Réservation de ressources à l'heure
Selection d'intervalle de date et heure mysqlHeure sous excel
Décaler l'heure de quelques minutes.[VBA] soustraire une variable à une heure
Problème affichage de l'heure[Résolu]Copier fichier das un autre avec dossier date et heure
algorithme permettant de changer l"heure d"un pc en cPHP écrire la date et l'heure sur une image
Plus de sujets relatifs à : UTC en heure légale


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR