C# 将10位儒略日期转换为日期时间

C# 将10位儒略日期转换为日期时间,c#,C#,我尝试用以下代码转换sql server数据库中的int字段1368463365 public static DateTime JulianToDateTime(int julianDate) { int RealJulian = julianDate + 1900000; int year = Convert.ToInt32(RealJulian.ToString().Substring(0, 4)); int DoY = Convert.ToInt32(RealJul

我尝试用以下代码转换sql server数据库中的int字段1368463365

public static DateTime JulianToDateTime(int julianDate)
{
    int RealJulian = julianDate + 1900000;
    int year = Convert.ToInt32(RealJulian.ToString().Substring(0, 4));
    int DoY = Convert.ToInt32(RealJulian.ToString().Substring(4));
    DateTime d = new DateTime(year, 1, 1);
    return d.AddDays(DoY - 1);
}

您的输入不是朱利安日期。这是一个时间戳。1368463365指2013年5月13日星期一格林尼治标准时间16:42:45

您可以使用以下方法从时间戳获取日期时间:

public static DateTime UnixTimeStampToDateTime( int unixTimeStamp )
{
    // Unix timestamp is seconds past epoch
    System.DateTime dtDateTime = new DateTime(1970,1,1,0,0,0,0);
    dtDateTime = dtDateTime.AddSeconds( unixTimeStamp ).ToLocalTime();
    return dtDateTime;
}
数字1368463365是,它是自1970年1月1日以来的秒数。在这种情况下,您需要做的就是将这个时间戳添加到DateTime,表示日期1/1/1970 00:00:00

另一个SO问题的示例代码:

public static DateTime UnixTimeStampToDateTime( double unixTimeStamp )
{
    // Unix timestamp is seconds past epoch
    System.DateTime dtDateTime = new DateTime(1970,1,1,0,0,0,0);
    dtDateTime = dtDateTime.AddSeconds( unixTimeStamp ).ToLocalTime();
    return dtDateTime;
}
查阅参考资料


顺便说一句,这里有一点错误,但是如果你想检查这个时间戳代表的日期,你可以在线检查它。

看起来你有一个Unix时间戳。1368463365的数值相当于2013年5月13日格林尼治标准时间16:42:45

Unix时间戳只是自1970年1月1日午夜UTC/GMT以来的秒数。因此,您可以将其转换为如下常规日期时间:

public static DateTime UnixTimeToDateTime(long timestamp)
{
    var dateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0);
    dateTime = dateTime.AddSeconds((double)timestamp);
    dateTime = dateTime.ToLocalTime();  // Change GMT time to your timezone
    return dateTime;
}
改编自。用法:

在我的荷兰计算机上的结果(UTC+2):

13-5-2013 18:42:45
据我所知,朱利安约会可能意味着

自公元前4713年1月1日至儒略历UTC中午12:00:00的天数,即公历公元前4714年11月24日。今天2014年2月18日至少有一部分时间是JD 2456706

一年中的第几天(如2013年12月31日)是2013365;2012年12月31日为2012366

这些都不是10位数字。要转换成/转换成前者,请查看您的工作税美元…或至少是我的工作税美元

与序号日期表单的转换应该非常明显:

string   julianDate       = "2014323" ; // the 323rd day of  2014
int      year             = int.Parse( julianDate.substring(0,4) ) ;
int      ordinalDayNumber = int.Parse( julianDate.substring(4,3) ) ;
DateTime dt               = new DateTime(year,1,1).AddDays( ordinalDayNumber - 1 ) ;

unix时间是自UTC 1970年1月1日午夜以来的秒数

DateTime UnixTimeToDateTime(int timestamp)
{
    return new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddSeconds(timestamp);
}

在这里定义朱利安日期。您所指的似乎是自1900年以来的混合数字的文本表示形式,而不是。显示示例输入和预期输出,或更准确地描述您的问题。可能重复的作品,如charm+1
DateTime UnixTimeToDateTime(int timestamp)
{
    return new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddSeconds(timestamp);
}