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

  FORUM HardWare.fr
  Programmation
  Java

  [Résolu] Génération flux RSS - Format de date

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Résolu] Génération flux RSS - Format de date

n°1919275
TomZ
Posté le 28-08-2009 à 14:32:58  profilanswer
 

Bonjour à tous  :hello: ,
 
Voilà, je vous sollicite sur un problème que je rencontre à l'heure actuelle pour générer un flux RSS en "règles" conformément aux spécifications RSS 2.0
 
Ce problème porte sur les dates et sur la version java utilisée. La date doit respecter la spécification RFC 822.  
 
Avec Java 1.4 et au delà, pas de soucis
 

Code :
  1. SimpleDateFormat RFC822Format = new SimpleDateFormat("E, d MMM yyyy HH:mm:ss Z", java.util.Locale.US);
  2. String formatedDate = RFC822Format.format(new Date());
  3. //renvoie Fri, 28 Aug 2009 14:13:20 +0200


 
Par contre, dans Java 1.3.x le Z qui correspond à la Time zone (ici +0200 = 2 heures HHmm) n'existe pas. Nous avons bien le "petit z"
 

Code :
  1. SimpleDateFormat RFC822Format = new SimpleDateFormat("E, d MMM yyyy HH:mm:ss z", java.util.Locale.US);
  2. String formatedDate = RFC822Format.format(new Date());
  3. //Fri, 28 Aug 2009 14:15:43 CEST


 
Mais le résultat retourné ne satisfait pas la RFC 822 (http://asg.web.cmu.edu/rfc/rfc822.html#sec-5) selon http://validator.w3.org/feed/
 
Ma question est donc la suivante:  
 
Est-il possible de satisfaire la cette spécification RFC 822 pour la mise en forme des dates sur les flux RSS avec java 1.3.1 ? Si oui comment ?
 
Merci par avance.


Message édité par TomZ le 30-08-2009 à 09:59:45
mood
Publicité
Posté le 28-08-2009 à 14:32:58  profilanswer
 

n°1919548
sircam
I Like Trains
Posté le 29-08-2009 à 11:36:42  profilanswer
 

Tu peux ne pas utiliser SimpleDateFormat pour la partie "Z" et la construire à la main :-/
 
Sinon, quel bien triste contrainte que de devoir utiliser 1.3...
 
N.B. Par convention, les noms de variables ne commencent pas par des majuscules.


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°1919633
TomZ
Posté le 30-08-2009 à 09:56:27  profilanswer
 

Bonjour,
 
 
Voici la réponse à ma question effectivement un traitement "à la main" de la partie TimeZone. Ceci est hors contexte programme.
 

Code :
  1. public static String toRFC822(Date d) {
  2.  final long time = d.getTime();
  3.  // On formatte la chaine sans le timezone :
  4.  SimpleDateFormat RFC822Format = new SimpleDateFormat("E, d MMM yyyy HH:mm:ss", java.util.Locale.US);
  5.  String formatedDate = RFC822Format.format(d);
  6.  // On récupère le décallage du timezone pour la date indiqué :
  7.  float offset = RFC822Format.getTimeZone().getOffset(time)/3600000f;
  8.  // On récupère le nombre d'heure et de minutes :
  9.  int hours = (int) offset;
  10.  int minutes = Math.abs( (int) ( 100 * (offset-hours) ));
  11.  // On passe les minutes au format 60 :
  12.  minutes = minutes * 60 / 100;
  13.  // Puis on le formatte comme il faut :
  14.  NumberFormat nf = new DecimalFormat("00" );
  15.  String timezone = nf.format(hours) + nf.format(minutes);
  16.  if (timezone.length()==4) {
  17.   timezone = "+" + timezone;
  18.  }
  19.  return formatedDate + " " + timezone;
  20. }


 
Concernant le nom de la variable SimpleDateFormat, c'est également fourni hors contexte programme. Cette dernière à des majusucles car c'est une static final. En réalité, dans le programme, elle se nomme:

Code :
  1. private static final SimpleDateFormat RFC822_FORMAT = new SimpleDateFormat("E, d MMM yyyy HH:mm:ss Z", java.util.Locale.US);


 
 
Au niveau de la version de Java, le client ayant l'argent, nous sommes donc tributaires des migrations validées ou pas :( (et en ces temps difficiles, ce n'est pas primordial).
 
Merci.

n°1921877
TomZ
Posté le 07-09-2009 à 13:50:44  profilanswer
 

Bonjour à tous  :hello: ,
 
Une petite correction pour que la méthode ci-dessous soit totalement Java 1.3 compliant. Il faut utiliser les CALENDAR car la méthode getOffset n'accepte pas uniquement le temps en millisecondes en 1.3
 

Code :
  1. public static String toRFC822(Date _Date) {
  2.  GregorianCalendar vDate = new GregorianCalendar();
  3.    
  4.     vDate.setTime(_Date);
  5.    
  6.  // On formatte la chaine sans le timezone :
  7.  SimpleDateFormat vRFC822Format = new SimpleDateFormat("E, d MMM yyyy HH:mm:ss", java.util.Locale.US);
  8.  String vFormatedDate = vRFC822Format.format(_Date);
  9.   // On récupère le décallage du timezone pour la date indiqué :
  10.  TimeZone vTime = vRFC822Format.getTimeZone();
  11.  float vOffset = vTime.getOffset(
  12.    vDate.get(Calendar.ERA),
  13.    vDate.get(Calendar.YEAR),
  14.    vDate.get(Calendar.MONTH),
  15.    vDate.get(Calendar.DAY_OF_MONTH),
  16.    vDate.get(Calendar.DAY_OF_WEEK),
  17.    vDate.get(Calendar.MILLISECOND))/3600000f;
  18.  // On récupère le nombre d'heures et de minutes :
  19.  int vHours = (int) vOffset;
  20.  int vMinutes = Math.abs( (int) ( 100 * (vOffset-vHours) ));
  21.  // On passe les minutes au format 60 :
  22.  vMinutes = vMinutes * 60 / 100;
  23.  // Puis on le formatte comme il faut :
  24.  NumberFormat vNf = new DecimalFormat("00" );
  25.  String vTimezone = vNf.format(vHours) + vNf.format(vMinutes);
  26.  if (vTimezone.length()==4) {
  27.   vTimezone = "+" + vTimezone;
  28.  }
  29.  return vFormatedDate + " " + vTimezone;
  30. }


 
Merci.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  [Résolu] Génération flux RSS - Format de date

 

Sujets relatifs
[Résolu] [BATCH] Tracer la commande delete[Algo][Résolu]Générer tous les accords.
sendAndLoad pas de retour sous flash {résolu}Le format RDF
Problème d'authentification avec sha1[RESOLU][Résolu] Expressions régulières... je bloque. :(
[Résolu] CSS lien en block absolu sur IEProblème RSS valide qui ne s'affiche pas
[Résolu][MySQL] Jointure à 5 tables[RESOLU]couper un string
Plus de sujets relatifs à : [Résolu] Génération flux RSS - Format de date


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