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

Java Discussion :

Convertir un nombre de secondes depuis 1977 en une date


Sujet :

Java

  1. #1
    Membre averti
    Inscrit en
    Octobre 2006
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 48
    Par défaut Convertir un nombre de secondes depuis 1977 en une date
    Bonjour,

    Tout est dans le titre, je cherche une méthode java qui permette d'obtenir la date (année, mois, jour) correspondant à un nombre de secondes depuis le 1/1/1977, en utilisant un calendrier gregorien (qui prend en compte les années bisextiles).

    (.. j'ai pas trouver cela dans les faq, mais j'espère que j'ai bien cherché...)

    Salutations

  2. #2
    Membre averti
    Inscrit en
    Octobre 2006
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 48
    Par défaut
    C'est bon!

    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
     
    Calendar c = Calendar.getInstance(); 
     
    c.set(1977, 1, 1);
    long nb_secondes_from_1970_to_1977 = c.getTimeInMillis()/1000;
     
    long t = nb_secondes_depuis_1977_que_je_veux_transformer_en_date
     
    long time_in_seconds_since_1_1_1970 = t + nb_secondes_from_1970_to_1977;
     
    c.setTimeInMillis(time_in_seconds_since_1_1_1970*1000);
     
    int mYear = c.get(Calendar.YEAR);
    int mMonth = c.get(Calendar.MONTH); 
    int mDay = c.get(Calendar.DAY_OF_MONTH);

  3. #3
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Hello,

    Presque. Là c'est pour un nombre de secondes depuis le 1er Février 1977. (et inversement, mMonth est un nombre qui représente le numéro du mois moins 1.)

    Il aurait fallu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    c.set(1977, Calendar.JANUARY, 1);
    et remplacer mYear, mMonth et mDay par un seul mDate :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
    String mDate = dateFormat.format(c.getTime());
    À noter qu'avec la nouvelle API de dates de Java 1.8, on peut faire comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    LocalDateTime january1977 = LocalDate.of(1977, 1, 1).atStartOfDay();
     
    long t = nb_secondes_depuis_1977_que_je_veux_transformer_en_date
     
    LocalDate mDate = january1977.plusSeconds(t).toLocalDate();
    C'est pas forcément plus clair, on jongle entre LocalDateTime pour être capable d'ajouter des secondes, et LocalDate pour ne garder que la date.
    Mais au moins, il n'y a pas de piège du genre "le nombre 1 c'est le mois de Février" comme dans l'ancienne API.

    Aussi, détail important : dans les trois cas, ces algorithmes supposent que les changements d'heure sont ceux de la machine en cours. C'est important, parce que les jours de changement d'heure ne font pas 24 heures, et donc n'ont pas autant de secondes que les autres. Ce qui fait que si le nombre de secondes à convertir, n'a pas les mêmes conventions que la machine en cours, la conversion sera potentiellement incorrecte.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre averti
    Inscrit en
    Octobre 2006
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 48
    Par défaut
    Merci! j’étais en train de m'arracher les cheveux, je croyais que le pb venait d'ailleurs!

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

Discussions similaires

  1. Rapatrier un nombre de données en fonction d'une date
    Par CLAUDE19 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 26/12/2014, 11h42
  2. Réponses: 12
    Dernier message: 13/07/2014, 14h21
  3. Réponses: 7
    Dernier message: 24/11/2009, 12h28
  4. [PHP 5.0] Convertir un nombre de seconde depuis 1970 en date
    Par johnson95 dans le forum Langage
    Réponses: 3
    Dernier message: 07/07/2009, 21h43
  5. Réponses: 3
    Dernier message: 29/07/2008, 12h10

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