Convertir un nombre de jour en une date

loveslife Messages postés 3 Date d'inscription jeudi 2 décembre 2010 Statut Membre Dernière intervention 21 mai 2012 - 19 mai 2012 à 18:04
wortmany Messages postés 8 Date d'inscription jeudi 21 octobre 2004 Statut Membre Dernière intervention 22 mai 2012 - 22 mai 2012 à 15:56
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();

}

3 réponses

Nyuki Messages postés 21 Date d'inscription mardi 6 mai 2008 Statut Membre Dernière intervention 13 août 2013
20 mai 2012 à 12:05
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,
0
loveslife Messages postés 3 Date d'inscription jeudi 2 décembre 2010 Statut Membre Dernière intervention 21 mai 2012
21 mai 2012 à 01:10
MErci Akiko Nyuki pour la réponse mais je dois po utiliser les fonctions préalablement défini
0
wortmany Messages postés 8 Date d'inscription jeudi 21 octobre 2004 Statut Membre Dernière intervention 22 mai 2012
22 mai 2012 à 15:56
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;
}
0
Rejoignez-nous