我尝试使用以下代码转换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);
}
答案 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);
}