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

VB.NET Discussion :

Conversion Date Julian [Débutant]


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2011
    Messages : 14
    Par défaut Conversion Date Julian
    Comment convertir en vb.net une date Julian en une date normal et vice versa ?
    Exemple: 95001 ----> 1/1/1995
    Merci

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Je ne pense pas que ce format ait quoi que ce soit à voir avec le calendrier Julien...
    D'où sort cette valeur (95001) ? Comment est définie la conversion entre ce format et une date ?

  3. #3
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    A priori je dirais que les 2 premiers digits représentent l'année et les 3 derniers, le numéro du jour dans l'année.

  4. #4
    Membre Expert Avatar de Danyel
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2005
    Messages
    1 699
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 699
    Par défaut
    Je connais pas ce format non plus, mais la reflexion de griftou semble des plus logique.

  5. #5
    Membre averti
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2011
    Messages : 14
    Par défaut
    Bonjour,
    La date julian est sous la forme de CYYDDD avec:
    C=1 si l'année>2000 et = 0 si l'année<1999
    YY:l'année de la date sur 2 digit
    DDD:le jour de l'année sur 3digit [001<=DDD<=365(or366)
    mais le probléme c'est comment je peux traiter cette fonction en vb.net
    Merci

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Bah c'est pas très compliqué, il suffit de décomposer le nombre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Function FromJulianDate(julianDate As Integer) As DateTime
    	If julianDate < 0 OrElse julianDate > 199365 Then
    		Throw New ArgumentException("Not a valid date.", "julianDate")
    	End If
    	Dim y2kflag As Boolean = julianDate >= 100000
    	Dim dayOfYear As Integer = julianDate Mod 1000
    	Dim year As Integer = (julianDate \ 1000) Mod 100 + (If(y2kflag, 2000, 1900))
    	Dim daysInYear As Integer = If(DateTime.IsLeapYear(year), 366, 365)
    	If dayOfYear < 1 OrElse dayOfYear > daysInYear Then
    		Throw New ArgumentException("Not a valid date.", "julianDate")
    	End If
    	Return New DateTime(year, 1, 1).AddDays(dayOfYear - 1)
    End Function
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim d As DateTime = FromJulianDate(95001) ' 01/01/1995

  7. #7
    Membre Expert Avatar de Danyel
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2005
    Messages
    1 699
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 699
    Par défaut
    Simple, mais belle fonction tom

  8. #8
    Inactif
    Homme Profil pro
    Auteur logiciels et romans
    Inscrit en
    Février 2009
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Auteur logiciels et romans
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Février 2009
    Messages : 203
    Par défaut
    Citation Envoyé par RAWIA.BY Voir le message

    Comment convertir en vb.net une date Julian en une date normal et vice versa ?
    Exemple: 95001 ----> 1/1/1995

    Merci

    Bonjour,

    Es-tu certain de parler de date Julienne (avant le 15 octobre 1582), ça ne semble pas être le cas...

    Ton exemple n'est pas une conversion de système de datation, mais de notation d'une date grégorienne, je ne vois pas pourquoi tu parles de date "julienne" ?

    A contrario de VB qui remonte à la date d'adoption par les anglais de la réforme grégorienne, et non à la réfome proprement dite, Il y a une classe en VB net :

    JulianCalendar, classe .NET Framework 4

    Ici :

    http://msdn.microsoft.com/fr-<br /> ...ncalendar.aspx

    Cette classe ne fonctionne que juqsqu'à l'an Grégorien 1, sinon il faut utiliser les calculs astronomique avec le JJ = JourJulien :

    Voici un exemple (à copier coller), que j'avais donné sur le site vbNet de Microsoft, il s'applique au JJ positifs, donc avant le (-4713) :

    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
     
    Option Explicit On
    'objets = 9 (form + (textbox * 6) + (button * 2)
    ' nota bene : les textbox sont chargés pour la démonstration...
     
     
    Class form1
     Dim Jour As Long
     Dim Mois As Long
     Dim Annee As Long
     Dim heure As Long
     Dim JJ As Double
     Dim jourSemaine
     Dim calendrier
     '
     Sub form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
     TextBox1.Text = Now.Day
     TextBox2.Text = Now.Month
     TextBox3.Text = Now.Year
     TextBox4.Text = TimeOfDay.Hour
     TextBox5.Text = "" ' JJ
     TextBox6.Text = "" ' résultat
     End Sub
     
     
     
     Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
     ' date en JJ
     Dim P As Double
     Dim y As Long
     Dim m As Long
     Dim a As Long
     Dim b As Long
     Dim gregorien As Boolean
     '
     Jour = CLng(TextBox1.Text)
     Mois = CLng(TextBox2.Text)
     Annee = CLng(TextBox3.Text)
     heure = CLng(TextBox4.Text)
     '
     P = Jour + (heure / 24) ' jour,heure
     y = Annee
     m = Mois
     If Mois < 3 Then ' correctif février
     y = y - 1
     m = Mois + 12
     End If
     If y > 0 Then ' année positive
     JJ = Fix(365.25 * y) + Fix(30.6001 * (m + 1)) + P + 1720994.5
     Else ' année négative
     JJ = Fix(365.25 * y - 0.75) + Fix(30.6001 * (m + 1)) + P + 1720994.5
     End If
     If Annee > 1582 Then gregorien = True ' réforme grégorienne
     If Annee < 1582 Then gregorien = False
     If Annee = 1582 Then
     If m < 10 Then gregorien = False
     If m > 10 Then gregorien = True
     If m = 10 Then
     If Jour < 15 Then gregorien = False
     If Jour > 14 Then gregorien = True
     End If
     End If
     If gregorien = True Then ' décompte 10 jours inexistants
     a = Fix(y / 100)
     b = 2 - a + Fix(a / 4)
     JJ = JJ + b
     End If
     If JJ < 0 Then
     TextBox5.Text = "JJ négatif : hor limite (1/1/-4712:12"
     Exit Sub
     End If
     TextBox6.Text = "JJ = " & JJ
     TextBox5.Text = JJ
     End Sub
     
     
     Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
     ' JJ en date
     Dim z As Double ' ent
     Dim f As Double ' dec
     Dim a As Double
     Dim aa As Double ' An
     Dim b As Double
     Dim c As Double
     Dim d As Double
     Dim ee As Double
     Dim jr As Double
     Dim ms As Double
     Dim an As Double
     Dim n As Double
     Dim js As String ' jour semaine
     Dim hjj As Double ' heure du JJ
     '
     JJ = CDbl(TextBox5.Text)
     JJ = JJ + 0.5
     z = Fix(JJ)
     f = System.Math.Round(JJ - z, 3)
     If z < 2299161 Then aa = Fix(z) ' avant réforme grégorienne
     If z >= 2299161 Then ' après réforme grégorienne (-10 jours)
     a = Fix((z - 1867216.25) / 36524.25)
     aa = (z + 1 + a) - Int(a / 4)
     End If
     b = aa + 1524
     c = Int((b - 122.1) / 365.25)
     d = Int(365.25 * c)
     ee = Int((b - d) / 30.6001)
     jr = b - d - Int(30.6001 * ee) + f
     If ee <= 13.5 Then ms = ee - 1
     If ee > 13.5 Then ms = ee - 13
     If ms <= 2.5 Then an = c - 4715
     If ms > 2.5 Then an = c - 4716
     ' 12h JJ = 0h00 calendaire (GMT)
     If heure < 12 Then n = Fix(JJ + 1.5) Mod 7
     If heure >= 12 Then n = Fix(JJ + 1) Mod 7
     Select Case n
     Case 0 : js = "di "
     Case 1 : js = "lu "
     Case 2 : js = "me "
     Case 3 : js = "me "
     Case 4 : js = "je "
     Case 5 : js = "ve "
     Case 6 : js = "sa "
     End Select
     If heure < 1 Then hjj = 0
     If heure > 0 Then
     hjj = JJ - Int(JJ)
     If hjj < 1 Then heure = 0
     If hjj > 0 Then heure = Int(hjj / 0.041)
     End If
     TextBox6.Text = js & Int(jr) & "/" & Format(ms, "00") & "/" & an & " à " & heure & "h"
     End Sub
     
    End Class

  9. #9
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par Ehjoe Voir le message
    Es-tu certain de parler de date Julienne (avant le 15 octobre 1582), ça ne semble pas être le cas...

    Ton exemple n'est pas une conversion de système de datation, mais de notation d'une date grégorienne, je ne vois pas pourquoi tu parles de date "julienne" ?
    En fait ça n'a pas de rapport avec le calendrier julien, c'est juste une notation que les anglophones appellent abusivement "julian date format"
    http://en.wikipedia.org/wiki/Calendar_date#Usage_issues

    Ce format est aussi mentionné ici :
    http://en.wikipedia.org/wiki/ISO_8601#Ordinal_dates
    Et ils disent :
    This system is sometimes incorrectly referred to as "Julian Date"

  10. #10
    Inactif
    Homme Profil pro
    Auteur logiciels et romans
    Inscrit en
    Février 2009
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Auteur logiciels et romans
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Février 2009
    Messages : 203
    Par défaut
    Citation Envoyé par tomlev Voir le message
    En fait ça n'a pas de rapport avec le calendrier julien, c'est juste une notation que les anglophones appellent abusivement "julian date format"
    http://en.wikipedia.org/wiki/Calendar_date#Usage_issues

    Ce format est aussi mentionné ici :
    http://en.wikipedia.org/wiki/ISO_8601#Ordinal_dates
    Et ils disent :

    Bonjour TomLev,

    Ahhhh... ok, ben alors c'est une date grégorienne que les anglais appellent julienne, c'est pour ça qu'ils sont anglais...

    Merci de l'explication.

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

Discussions similaires

  1. conversion date/compteur
    Par Papagei dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 13/09/2005, 12h17
  2. Conversion date ->heures
    Par bdkiller dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 02/09/2004, 16h08
  3. [CONVERSION] DATE
    Par Mister_FX dans le forum ASP
    Réponses: 3
    Dernier message: 05/07/2004, 10h07
  4. Problème conversion date
    Par mat.M dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 30/03/2004, 15h05
  5. Conversion Date
    Par ZuZu dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 09/10/2003, 16h02

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