Question

J'ai une cellule dans une feuille de calcul qui est un objet de date dans Excel, mais devient un double (quelque chose comme 39820,0 pour 1/7/2009) quand il sort de la classe C1 xls de. J'ai lu c'est un format de date Julian. Quelqu'un peut-il me dire comment l'analyser de nouveau dans un DateTime en C #?

Mise à jour: Il semble que je ne pourrais pas avoir une date Julian, mais le nombre de jours écoulés depuis le 30 décembre 1899

.
Était-ce utile?

La solution

Je pense que Excel est juste en utilisant le standard OLE Automation DATE type qui peut être transformé par la méthode DateTime.FromOADate.

Ce bloc de code,

using System;

namespace DateFromDouble
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(DateTime.FromOADate(39820.0));
        }
    }
}

sorties:

1/7/2009 12:00:00 AM

Autres conseils

Il y a une classe JulianCalendar dans System.Globalization; Voici comment vous l'utiliser:

            JulianCalendar c = new JulianCalendar();
            DateTime time = c.ToDateTime(2009, 1, 7, 0, 0, 0, 0);
            Console.WriteLine(time.ToShortDateString());

EDIT:

S'il est en jours de fait depuis « 1900 » voici comment vous pouvez le faire:

public static DateTime DaysSince1900(int days)
{
    return new DateTime(1900, 1, 1).AddDays(days);
}



 DateTime time = DaysSince1900(39820);
 Console.WriteLine(time.ToShortDateString()); //will result in "1/9/2009"

Ce numéro ressemble à un « nombre de jours depuis 1900 » valeur.

Lorsque vous traitez avec des dates Excel, la date peut être la représentation de chaîne d'une date, ou il peut être une date d'OA. Ceci est une méthode d'extension, j'ai écrit un certain temps pour aider à faciliter la conversion de la date:

/// <summary>
/// Sometimes the date from Excel is a string, other times it is an OA Date:
/// Excel stores date values as a Double representing the number of days from January 1, 1900.
/// Need to use the FromOADate method which takes a Double and converts to a Date.
/// OA = OLE Automation compatible.
/// </summary>
/// <param name="date">a string to parse into a date</param>
/// <returns>a DateTime value; if the string could not be parsed, returns DateTime.MinValue</returns>
public static DateTime ParseExcelDate( this string date )
{
    DateTime dt;
    if( DateTime.TryParse( date, out dt ) )
    {
        return dt;
    }

    double oaDate;
    if( double.TryParse( date, out oaDate ) )
    {
        return DateTime.FromOADate( oaDate );
    }

    return DateTime.MinValue;
}

format Élargi la cellule (s) en question date, utilisez CTRL + 1, puis sélectionnez le format de votre choix.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top