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

API standards et tierces Java Discussion :

Génération flux RSS - Format de date


Sujet :

API standards et tierces Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 38
    Par défaut Génération flux RSS - Format de date
    Bonjour à tous ,

    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SimpleDateFormat RFC822Format = new SimpleDateFormat("E, d MMM yyyy HH:mm:ss Z", java.util.Locale.US);
    String formatedDate = RFC822Format.format(new Date());
    //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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SimpleDateFormat RFC822Format = new SimpleDateFormat("E, d MMM yyyy HH:mm:ss z", java.util.Locale.US);
    String formatedDate = RFC822Format.format(new Date());
    //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 ?

    Merci par avance.

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,



    Tu peux normalement récupérer ces infos via la classe TimeZone. Ensuite il ne reste plus qu'à formater :
    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
    	public static String toRFC822(Date d) {
    		final long time = d.getTime();
    		// On formatte la chaine sans le timezone :
    		SimpleDateFormat RFC822Format = new SimpleDateFormat("E, d MMM yyyy HH:mm:ss", java.util.Locale.US);
     
    		String formatedDate = RFC822Format.format(time);
     
    		// On récupère le décallage du timezone pour la date indiqué :
    		float offset = RFC822Format.getTimeZone().getOffset(time)/3600000f;
    		// On récupère le nombre d'heure et de minutes :
    		int hours = (int) offset;
    		int minutes = Math.abs( (int) ( 100 * (offset-hours) ));
    		// On passe les minutes au format 60 :
    		minutes = minutes * 60 / 100;
     
    		// Puis on le formatte comme il faut :
    		NumberFormat nf = new DecimalFormat("00");
    		String timezone = nf.format(hours) + nf.format(minutes);
    		if (timezone.length()==4) {
    			timezone = "+" + timezone;
    		}
    		return formatedDate + " " + timezone;
    	}
    a++

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 38
    Par défaut
    Superbe.

    J'avais effectivement recherché du côté des Timezone. Simplement l'appel sur le SimpleDateFormat doit faire référence à la date.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String formatedDate = RFC822Format.format(d);
    Merci beaucoup.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 38
    Par défaut
    Bonjour à tous,

    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 : 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
     
    	public static String toRFC822(Date _Date) {
     
    		GregorianCalendar vDate = new GregorianCalendar();
     
                    vDate.setTime(_Date);
     
    		// On formatte la chaine sans le timezone :
    		SimpleDateFormat vRFC822Format = new SimpleDateFormat("E, d MMM yyyy HH:mm:ss", java.util.Locale.US);
     
    		String vFormatedDate = vRFC822Format.format(_Date);
     
    	        // On récupère le décallage du timezone pour la date indiqué :
    		TimeZone vTime = vRFC822Format.getTimeZone();
     
    		float vOffset = vTime.getOffset(
    				vDate.get(Calendar.ERA),
    				vDate.get(Calendar.YEAR),
    				vDate.get(Calendar.MONTH), 
    				vDate.get(Calendar.DAY_OF_MONTH), 
    				vDate.get(Calendar.DAY_OF_WEEK),
    				vDate.get(Calendar.MILLISECOND))/3600000f;
     
     
    		// On récupère le nombre d'heures et de minutes :
    		int vHours = (int) vOffset;
    		int vMinutes = Math.abs( (int) ( 100 * (vOffset-vHours) ));
     
    		// On passe les minutes au format 60 :
    		vMinutes = vMinutes * 60 / 100;
     
    		// Puis on le formatte comme il faut :
    		NumberFormat vNf = new DecimalFormat("00");
    		String vTimezone = vNf.format(vHours) + vNf.format(vMinutes);
    		if (vTimezone.length()==4) {
    			vTimezone = "+" + vTimezone;
    		}
    		return vFormatedDate + " " + vTimezone;
    	}

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

Discussions similaires

  1. Génération flux RSS
    Par dl_jarod dans le forum Langage
    Réponses: 2
    Dernier message: 27/08/2008, 15h55
  2. [XML] [RSS] Recherche classe génération flux RSS
    Par Sayrus dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 20/02/2008, 12h58
  3. Génération de flux RSS : choix de format
    Par Bergolf dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 20/02/2007, 14h09
  4. [Conception] Recuperation plusieurs flux RSS et tri par date
    Par Pschittt dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 24/08/2006, 18h55
  5. php et génération flux rss
    Par wehtam dans le forum Langage
    Réponses: 1
    Dernier message: 20/07/2006, 18h40

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