Frage

Ich habe eine Zelle in einer Tabelle, die ein Date-Objekt in Excel, sondern wird zu einem Doppel (so etwas wie 39.820,0 für 1/7/2009), wenn es aus der C1 der xls-Klasse kommt. Ich habe gelesen, das ist ein Julian Datumsformat. Kann mir jemand sagen, wie es in einem DateTime- in C # zurück zu analysieren?

Update: Es sieht aus wie ich nicht ein julianisches Datum haben könnte, sondern die Anzahl der Tage seit dem 30. Dezember 1899

.
War es hilfreich?

Lösung

Ich denke, Excel ist nur die Standard-OLE-Automatisierung mit DATE Typ die mit dem DateTime.FromOADate Verfahren umgewandelt werden kann.

Dieser Codeblock,

using System;

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

Ausgänge:

1/7/2009 12:00:00 AM

Andere Tipps

Es gibt eine JulianCalendar Klasse in System.Globalization; Hier ist, wie würden Sie es verwenden:

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

EDIT:

Wenn es in der Tat Tagen seit „1900“ hier ist, wie Sie es tun können:

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"

Diese Zahl sieht aus wie eine ‚Anzahl der Tage seit dem Jahr 1900‘ Wert.

Wenn Sie mit Excel Daten handelt, kann das Datum der String-Darstellung eines Datums sein, oder es kann ein OA Datum sein. Dies ist eine Erweiterung Methode, die ich vor einiger Zeit schrieb die Datumsumstellung zu helfen, zu erleichtern:

/// <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;
}

Sie einfach die Zelle formatiert (s) in Frage, wie Datum, mit STRG + 1, und wählen Sie das gewünschte Format.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top