Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Faire l'inverse de la fonction DayOfYear ?

3 réponses
Avatar
login XP
Je selectionne une date au format standart : 09/03/2006
et je la transforme de la façon suivante :

NumDayAnnee.Text = Me.Date.Value.DayOfYear
exemple : en entrée je sélectionne le 09/03/2006
se qui donne : n°jour : 68 et année : 2006

Cela marche tres bien .

Comment puis je faire l'enverse avec comme données :

Un entier representant le N° de journée de l'année + un 2 eme entier
avec l'année en cours

exemple : LabelN°Jour = 68 et LabelAnnée = 2006

pour avoir en sortie le 09/03/2006

merci de votre aide

laurent

3 réponses

Avatar
Millox Frédéric
Bonjour,

Essaye ce bout de code :

Dim tabMonth(12), sum, numero, day, month, year As Integer
Dim d As Date

numero = 32
year = 2006

' Init.
tabMonth(0) = 31
tabMonth(1) = IIf(Date.IsLeapYear(year), 29, 28)
tabMonth(2) = 31
tabMonth(3) = 30
tabMonth(4) = 31
tabMonth(5) = 30
tabMonth(6) = 31
tabMonth(7) = 31
tabMonth(8) = 30
tabMonth(9) = 31
tabMonth(10) = 30
tabMonth(11) = 31

sum = 0
If numero = 365 Then
d = New Date(year, 12, 31)
Else
For i As Integer = 0 To tabMonth.Length - 1
sum += tabMonth(i)
If sum > numero Then
day = numero - (sum - tabMonth(i))
month = i + 1
d = New Date(year, month, day)
Exit For
End If
Next
End If

Console.WriteLine(d.ToShortDateString)

Bonne journée.

A+

--
fmillox


"login XP" a écrit :

Je selectionne une date au format standart : 09/03/2006
et je la transforme de la façon suivante :

NumDayAnnee.Text = Me.Date.Value.DayOfYear
exemple : en entrée je sélectionne le 09/03/2006
se qui donne : n°jour : 68 et année : 2006

Cela marche tres bien .

Comment puis je faire l'enverse avec comme données :

Un entier representant le N° de journée de l'année + un 2 eme entier
avec l'année en cours

exemple : LabelN°Jour = 68 et LabelAnnée = 2006

pour avoir en sortie le 09/03/2006

merci de votre aide

laurent


Avatar
Millox Frédéric
Re,

Petit oubli : il faut gérer le cas où numero < 1 ou numero > 365..... :)

A+

--
fmillox


"Millox Frédéric" a écrit :

Bonjour,

Essaye ce bout de code :

Dim tabMonth(12), sum, numero, day, month, year As Integer
Dim d As Date

numero = 32
year = 2006

' Init.
tabMonth(0) = 31
tabMonth(1) = IIf(Date.IsLeapYear(year), 29, 28)
tabMonth(2) = 31
tabMonth(3) = 30
tabMonth(4) = 31
tabMonth(5) = 30
tabMonth(6) = 31
tabMonth(7) = 31
tabMonth(8) = 30
tabMonth(9) = 31
tabMonth(10) = 30
tabMonth(11) = 31

sum = 0
If numero = 365 Then
d = New Date(year, 12, 31)
Else
For i As Integer = 0 To tabMonth.Length - 1
sum += tabMonth(i)
If sum > numero Then
day = numero - (sum - tabMonth(i))
month = i + 1
d = New Date(year, month, day)
Exit For
End If
Next
End If

Console.WriteLine(d.ToShortDateString)

Bonne journée.

A+

--
fmillox


"login XP" a écrit :

> Je selectionne une date au format standart : 09/03/2006
> et je la transforme de la façon suivante :
>
> NumDayAnnee.Text = Me.Date.Value.DayOfYear
> exemple : en entrée je sélectionne le 09/03/2006
> se qui donne : n°jour : 68 et année : 2006
>
> Cela marche tres bien .
>
> Comment puis je faire l'enverse avec comme données :
>
> Un entier representant le N° de journée de l'année + un 2 eme entier
> avec l'année en cours
>
> exemple : LabelN°Jour = 68 et LabelAnnée = 2006
>
> pour avoir en sortie le 09/03/2006
>
> merci de votre aide
>
> laurent


Avatar
Millox Frédéric
Rere,

Il manquait des petites choses ( pas tous les cas traités )

Friend Function GetDate(ByVal NumberOfDayInYear As Integer, ByVal Year As
Integer) As Date
Dim tabMonth(12), sum, day, month As Integer
Dim isLeapYear As Boolean
Dim d As Date

isLeapYear = Date.IsLeapYear(year)
If NumberOfDayInYear < 1 Or NumberOfDayInYear > IIf(isLeapYear, 366,
365) Then Throw New Exception("Erreur")

' Init.
tabMonth(0) = 31
tabMonth(1) = IIf(isLeapYear, 29, 28)
tabMonth(2) = 31
tabMonth(3) = 30
tabMonth(4) = 31
tabMonth(5) = 30
tabMonth(6) = 31
tabMonth(7) = 31
tabMonth(8) = 30
tabMonth(9) = 31
tabMonth(10) = 30
tabMonth(11) = 31

sum = 0
For i As Integer = 0 To tabMonth.Length - 1
sum += tabMonth(i)
If sum > NumberOfDayInYear Then
day = NumberOfDayInYear - (sum - tabMonth(i))
month = i + 1
d = New Date(Year, month, day)
Exit For
End If
If i = tabMonth.Length - 1 And sum = NumberOfDayInYear Then d =
New Date(Year, 12, 31)
Next

Return d
End Function

A+

--
fmillox


"Millox Frédéric" a écrit :

Re,

Petit oubli : il faut gérer le cas où numero < 1 ou numero > 365..... :)

A+

--
fmillox


"Millox Frédéric" a écrit :

> Bonjour,
>
> Essaye ce bout de code :
>
> Dim tabMonth(12), sum, numero, day, month, year As Integer
> Dim d As Date
>
> numero = 32
> year = 2006
>
> ' Init.
> tabMonth(0) = 31
> tabMonth(1) = IIf(Date.IsLeapYear(year), 29, 28)
> tabMonth(2) = 31
> tabMonth(3) = 30
> tabMonth(4) = 31
> tabMonth(5) = 30
> tabMonth(6) = 31
> tabMonth(7) = 31
> tabMonth(8) = 30
> tabMonth(9) = 31
> tabMonth(10) = 30
> tabMonth(11) = 31
>
> sum = 0
> If numero = 365 Then
> d = New Date(year, 12, 31)
> Else
> For i As Integer = 0 To tabMonth.Length - 1
> sum += tabMonth(i)
> If sum > numero Then
> day = numero - (sum - tabMonth(i))
> month = i + 1
> d = New Date(year, month, day)
> Exit For
> End If
> Next
> End If
>
> Console.WriteLine(d.ToShortDateString)
>
> Bonne journée.
>
> A+
>
> --
> fmillox
>
>
> "login XP" a écrit :
>
> > Je selectionne une date au format standart : 09/03/2006
> > et je la transforme de la façon suivante :
> >
> > NumDayAnnee.Text = Me.Date.Value.DayOfYear
> > exemple : en entrée je sélectionne le 09/03/2006
> > se qui donne : n°jour : 68 et année : 2006
> >
> > Cela marche tres bien .
> >
> > Comment puis je faire l'enverse avec comme données :
> >
> > Un entier representant le N° de journée de l'année + un 2 eme entier
> > avec l'année en cours
> >
> > exemple : LabelN°Jour = 68 et LabelAnnée = 2006
> >
> > pour avoir en sortie le 09/03/2006
> >
> > merci de votre aide
> >
> > laurent