質問
私は、Excelの日付オブジェクトであるが、それはC1のXLSクラスから出てきたときに、二重(2009年1月7日のための39820.0のようなもの)になるスプレッドシート内のセルを持っています。私は、これはユリウス日付形式でお読みください。誰かがC#でのDateTimeに戻ってそれを解析する方法を教えてもらえます?
更新:それは私がユリウス暦の日付を持っていないかもしれないように見えるが、1899年12月30日以来の日の代わりに番号
。解決
私は、Excelだけで、標準のOLEオートメーション 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
他のヒント
System.GlobalizationでJulianCalendarクラスがあります。ここでは、あなたがそれを使用する方法は次のとおりです。
JulianCalendar c = new JulianCalendar();
DateTime time = c.ToDateTime(2009, 1, 7, 0, 0, 0, 0);
Console.WriteLine(time.ToShortDateString());
EDITます:
それは「1900」以来、実際の日である場合は、ここにあなたがそれを行うことができます方法は次のとおりです。
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"
その数は、値「1900年からの日数」のように見えます。
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;
}
ただ、日付として、問題のセル(複数可)をフォーマットするCTRL + 1を使用し、ご希望の形式を選択します。
所属していません StackOverflow