C # Fecha juliana Analizador
-
21-08-2019 - |
Pregunta
Tengo una celda de una hoja de cálculo que es un objeto de fecha en Excel, pero se convierte en una doble (algo así como 39820.0 para 1/7/2009) cuando se trata de la clase C1 de xls. He leído este es un formato de fecha juliana. ¿Puede alguien decirme cómo analizar de nuevo en un DateTime en C #?
Actualización: Parece que yo no tuviese una fecha juliana, pero en cambio el número de días desde el 30 de Dic, 1899
.Solución
Creo Excel es sólo con el estándar de automatización OLE FECHA tipo que se puede convertir con el método DateTime.FromOADate
.
Este bloque de código,
using System;
namespace DateFromDouble
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(DateTime.FromOADate(39820.0));
}
}
}
salidas:
1/7/2009 12:00:00 AM
Otros consejos
Hay una clase JulianCalendar en System.Globalization; He aquí cómo usted lo utilizaría:
JulianCalendar c = new JulianCalendar();
DateTime time = c.ToDateTime(2009, 1, 7, 0, 0, 0, 0);
Console.WriteLine(time.ToShortDateString());
EDIT:
Si es en días de hecho ya que "1900" He aquí cómo usted puede hacerlo:
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"
Ese número se parece a un 'número de días desde el año 1900' valor.
Cuando se trata de fechas de Excel, la fecha puede ser la representación de cadena de una fecha, o puede ser una fecha de OA. Este es un método de extensión que escribí hace un tiempo para ayudar a facilitar la conversión de la fecha:
/// <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;
}
Al igual formato a la celda (s) en cuestión como fecha, utilice CTRL + 1, y seleccionar el formato deseado.