سؤال

ولدي خلية في جدول البيانات الذي هو كائن تاريخ في Excel ولكنه يصبح مزدوج (شيء من هذا القبيل 39820.0 ل1/7/2009) عندما يخرج من الدرجة XLS C1 ل. قرأت هذا هو تنسيق التاريخ جوليان. فهل يمكن أن تقولوا لي كيفية تحليل إعادته إلى التاريخ والوقت في C #؟

تحديث: يبدو وكأنني قد لا يكون لها تاريخ جوليان، ولكن بدلا من ذلك على عدد الأيام منذ 30 ديسمبر 1899

.
هل كانت مفيدة؟

المحلول

وأعتقد إكسل هو مجرد استخدام معيار أتمتة OLE التاريخ نوع والتي يمكن تحويلها مع أسلوب 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

نصائح أخرى

وهناك فئة JulianCalendar في System.Globalization. وإليك كيف ستستخدم فيه:

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

وتحرير:

إذا كان في أيام الحقيقة منذ "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، قد يكون تاريخ تمثيل سلسلة من التاريخ، أو قد يكون موعد الزراعة العضوية. هذا هو أسلوب تمديد كتبت في حين يعود للمساعدة في تسهيل تحويل التاريخ:

/// <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، وحدد التنسيق الذي تريده.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top