将10位Julian日期转换为DateTime

时间:2014-02-18 18:45:32

标签: c#

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

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);
}

5 个答案:

答案 0 :(得分:3)

您的输入不是朱利安日期。这是一个时间戳。 1368463365是指Mon, 13 May 2013 16:42:45 GMT

您可以使用以下方法从时间戳中获取DateTime

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;
}

答案 1 :(得分:3)

看起来你有一个Unix时间戳。值1368463365将与2013年5月13日16:42:45 GMT等效。

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

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;
}

改编自this answer。用法:

long timestamp = 1368463365;
Console.WriteLine(UnixTimeToDateTime(timestamp));

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

13-5-2013 18:42:45

答案 2 :(得分:2)

数字1368463365是Unix timestamp及其自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;
}

检查this SO question以供参考。

顺便说一下,这里有一个错误的地方,但是如果你想查看这个时间戳代表的日期,你可以使用this converter在线查看。

答案 3 :(得分:1)

就我所知,朱利安日期可能意味着

  • 自公历4713年1月1日下午12:00:00(中午)UTC以来的日数,这是公历4714年11月24日公历。今天2014年2月18日是JD 2456706(至少部分时间。)

  • 一年中的序数日(例如2013年12月31日为2013365; 2012年12月31日为2012366。

这些都不是10位数。要转换为/从前者转换,请参阅http://aa.usno.navy.mil/faq/docs/JD_Formula.php(工作中的税金......或者至少我的工作税)。

转换为序数日期表格应该非常明显:

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 ) ;

答案 4 :(得分:1)

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

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