1

Excel の日付オブジェクトであるスプレッドシートにセルがありますが、C1 の xls クラスから出ると double (2009 年 1 月 7 日の 39820.0 のようなもの) になります。これはユリウス日付形式であると読みました。C# でそれを解析して DateTime に戻す方法を教えてもらえますか?

更新: ユリウス日ではなく、1899 年 12 月 30 日からの日数のようです。

4

8 に答える 8

10

Excelは、メソッドで変換できる標準のOLE Automation DATE型を使用しているだけだと思います。DateTime.FromOADate

このコードブロック、

using System;

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

出力:

1/7/2009 12:00:00 AM
于 2009-02-04T21:42:33.273 に答える
1

どうぞ。

http://dotnetblogger.com/post/2009/02/26/Convert-DateTime-to-Julian-Date-in-C.aspx

于 2010-04-18T21:22:24.897 に答える
1

Excel の日付を扱う場合、日付は日付の文字列表現である場合もあれば、OA の日付である場合もあります。これは、日付変換を容易にするために、私がしばらく前に書いた拡張メソッドです。

/// <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;
}
于 2010-04-18T21:34:04.187 に答える
0

問題のセルを日付としてフォーマットし、CTRL + 1 を使用して、目的のフォーマットを選択するだけです。

于 2014-11-19T23:10:51.367 に答える