2014-02-18 116 views
0

我試圖轉換1368463365這是一個int場在SQL Server數據庫中使用下面的代碼轉換的10位Julian日期爲DateTime

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

定義「儒略日期」在這裏。它看起來像是指自1900年以來的一個混合編號的文本表示(它不是[Julian Date](http://en.wikipedia.org/wiki/Julian_day))。 – user2864740

+5

顯示樣本輸入和預期輸出,或更準確地描述您的問題。 – MarcinJuraszek

+0

可能重複[如何將UNIX時間戳轉換爲DateTime,反之亦然?](http://stackoverflow.com/questions/249760/how-to-convert-unix-timestamp-to-datetime-and-vice-versa) –

回答

3

看起來你在那裏有一個Unix時間戳。價值1368463365將相當於2013年5月13日16:42:45 GMT。

Unix時間戳只是UTC/GMT 1970年1月1日午夜以來的秒數。所以,你可以將其轉換爲常規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 
+0

作品像魅力+ 1 – Pramesh

3

您的輸入不是公曆日期。這是一個時間戳。 1368463365Mon, 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; 
} 
+0

+ 1爲答案 – Pramesh

2

數1368463365爲Unix timestamp,自1/1/1970它的秒數。在這種情況下,你需要做的只是將這個時間戳添加到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在線檢查它。

+0

+1爲答案 – Pramesh

1

據我所知,儒略日可能意味着

  • 的計數自公元前4713年1月1日下午12:00:00(中午)開始的朱利安日曆中的UTC,即公元前4714年11月24日的公曆。 (一天至少一部分)今天,2014年2月18日是JD 2456706

  • 年的序號日期(例如2013年12月31 2013365; 2012年12月31 2.

無這些都是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) ; 
+0

+1解釋 – Pramesh

1

unix時間是自UTC 1970年1月1日午夜以來的秒數。

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