Convertir un nombre de jour en une date

Signaler
Messages postés
3
Date d'inscription
jeudi 2 décembre 2010
Statut
Membre
Dernière intervention
21 mai 2012
-
Messages postés
8
Date d'inscription
jeudi 21 octobre 2004
Statut
Membre
Dernière intervention
22 mai 2012
-
Bonjour.
je veux créer une fonction qui va convertir un nombre de jour en une date. Sachant que la date de départ peut varier.
pour moi la date de départ est 1901. et si je donne par exemple convertir(3632) la fonction va retourner le 12/12/1910.
le voilà le code de ma fonction qui ne marche pas toujours.
si quelqu'un a un algorithme ou une solution poste la svp. et merci d'avance.
//**********************************************************************

public Date(int j)
{
m_Jour = (j % 30)+1;
m_Mois = ((j / 30) % 12)+1;
m_An = ((j / 30) / 12)+1901;
}
public void convertir()
{
int j;

int nb_An = 1;
if (m_An !1901) nb_An m_An - 1901;

j = m_Jour - (7 * nb_An); // retirer le nbre de mois de 31 <m_An

//Console.WriteLine(j);

for (int k = 1901; k <= m_An; k++) // les années bissextilles
{
if (bissextile(k) == 1) j += 1;
else j += 2;
}

//Console.WriteLine(j);

for (int m = 1; m < m_Mois; m++) // retrnacher le nbre de 31 de m_An
{

if(m!=2) j -= complet(m);

}

if (j >1) m_Jour j;
else
{

if (m_Mois == 1) { m_An -= 1; m_Mois = 12; }

if (m_Mois > 1) m_Mois -= 1;

if (m_Mois 2) { m_Jour 28 + bissextile(m_An) + j; }
else { m_Jour = 30 + complet(m_Mois) + j; }
//Console.WriteLine(m_Jour);
}

while (m_Jour < 0)
{
int x;
// la division par 28/29/30/31 ... ????
if (m_Mois == 1) { m_An -= 1; x = 12; }
else x = m_Mois - 1;

if (x 2) x 28 + bissextile(m_An);
else x = 30 + complet(x);

int m = m_Jour/ x;

int J = m_Jour % x;
if (J >0) m_Moism_Mois + m ;
else m_Mois = m_Mois + m -1;

if (m_Mois < 1) m_Mois = 12;

if (m_Mois 2) m_Jour 28 + bissextile(m_An)-J;
else m_Jour = 30 + complet(m_Mois) + J;

}

if (m_Jour == 0 )
{
if (m_Mois == 1) { m_An -= 1; m_Mois = 12; }
else m_Mois -= 1;

if (m_Mois 2) m_Jour 28 + bissextile(m_An);
else m_Jour = 30 + complet(m_Mois);
}


afficher();

}
A voir également:

3 réponses

Messages postés
21
Date d'inscription
mardi 6 mai 2008
Statut
Membre
Dernière intervention
13 août 2013

Bonjour,

using System;

namespace TEST
{
class MainClass
{
public static void Main (string[] args)
{
DateTime DEB;
double num;
DEB = DateTime.Now;
num = 99;
DEB = DEB.AddDays(99); // Ajoute 99 à la date du JOUR
Console.WriteLine ("Hello World!");
}
}
}


@+
Akiko Nyuki,
Messages postés
3
Date d'inscription
jeudi 2 décembre 2010
Statut
Membre
Dernière intervention
21 mai 2012

MErci Akiko Nyuki pour la réponse mais je dois po utiliser les fonctions préalablement défini
Messages postés
8
Date d'inscription
jeudi 21 octobre 2004
Statut
Membre
Dernière intervention
22 mai 2012

Bonjour,

si ca peut t'aider

int j = 365;

j++;
Int32 iann = 1901;

Boolean btest = true;

while (btest)
{
    if (j - (365 + bissextile(iann)) > 0)
    {
        j = j - (365 + bissextile(iann));
        iann++;
    }
    else
    {
        btest = false;
    }
}
Int32 imois = 1;
for (imois = 1; imois < 13; imois++) // retrnacher le nbre de 31 de m_An 
{
    if (j - JoursMois(imois, iann) > 0)
    {
        j = j - JoursMois(imois, iann);
    }
    else
        break;

}


MessageBox.Show(iann.ToString("0000") + "/" + imois.ToString() + "/" + j.ToString());





private int bissextile(int i)
{
if ((i % 4 == 0 && i % 100 != 0) | i % 400 == 0)
    return 1;
else
    return 0;
}

private int JoursMois(int i, int iannee)
{
switch (i)
{
    case 1:
        return 31;
    case 2:
        return 28 + bissextile(iannee);
    case 3:
        return 31;
    case 4:
        return 30;
    case 5:
        return 31;
    case 6:
        return 30;
    case 7:
        return 31;
    case 8:
        return 31;
    case 9:
        return 30;
    case 10:
        return 31;
    case 11:
        return 30;
    case 12:
        return 31;
}

return 0;
}