def date(JJ):
    """
        Détermine la date du calendrier à partir du jour julien.
        La méthode suivante est valable pour les années positives aussi bien
        que négatives, mais non pour les jours juliens négatifs.
        Entrée :
            JJ le jour julien
        Retour :
            [Y, M, D]
            Y l’année
            M le numéro du mois
            D le jour du mois avec éventuellement des décimales de jour
            Erreur si :
                JJ n’est pas convertible en float
                JJ < 0
    """
    JJ = float(JJ)
    if(JJ < 0):
        message = "Cette méthode n'est pas valable pour les jours juliens"
        message += " négatifs"
        raise ValueError(message)
    JJ += 0.5
    Z = int(JJ)
    F = JJ - int(JJ)
    if (Z < 2299161):
        A = Z
    else:
        alpha = int((Z-1867216.25)/36524.25)
        A = Z + 1 + alpha - int(alpha/4)
    B = A + 1524
    C = int((B-122.1)/365.25)
    D = int(365.25*C)
    E = int((B - D)/30.6001)
    D = B - D - int(30.6001*E) + F
    if (E < 14):
        M = E - 1
    else:
        M = E - 13
    if (M > 2):
        Y = C - 4716
    else:
        Y = C - 4715
    return [Y, M, D]