2010-10-21 24 views
0

我有int號碼2455449,我知道這代表日期09/09/2010。我如何定義使用的日期格式?我需要以這種格式生成新的日期。它將用於http請求。我想那是朱利安,但我不確定。我試圖將此號碼轉換爲日期,但沒有返回09/09/2010的正確日期。大概我使用了錯誤的SimpleDateFormat("mm/dd/yy")或Calendar.XXXX(例如Calendar.DAY_OF_YEAR如何定義日期格式?

+3

你從哪裏得到2455449,它是如何轉換爲09/09/2010的? – mezzie 2010-10-21 17:38:06

+0

我分析了對服務器的http請求。我在09/09/2010填寫了日曆日期,並在服務器的http請求中獲得了此號碼(2455449)。 – user341203 2010-10-21 17:49:37

+0

你可以顯示你使用的代碼嗎? – 2010-10-21 18:37:15

回答

0

這是一個Julian day的數字,它用來計算自Julian 1761年格林尼治中午在公元前4713年1月1日開始的天數。

要從JD轉換爲UNIX時間戳:

unix_time_stamp = (JD -2440587.5) * 86400 

要轉換從UNIX時間戳JD:

JD = (unix_time_stamp/86400) + 2440587.5 

注意JD從正午,不是半夜計數。這就是爲什麼在添加結束時它是0.5。

更新如果你想在JavaScript中使用它(使用毫秒從紀元)

function dateFromJulianDay(julian_day) { 
    return new Date((julian_day - 2440587.5) * 86400000); 
} 

function dateToJulianDay(date) { 
    // date should be a javascript Date object 
    // or a variable with milliseconds since the unix epoch 1 jan 1970 
    return (date/86400000) + 2440587.5; 
} 

console.log(dateFromJulianDay(2455449)); 

console.log(dateToJulianDay(new Date(2010,9-1,9))); 

請記住,在構造日期的月份是0-11,什麼爲什麼做-1以上。

+0

非常感謝!我找到了一個更好的解決方案 - http://www.rgagnon.com/javadetails/java-0506.html – user341203 2010-10-21 22:30:23

+0

@ user341203:這個問題被錯誤地標記爲JavaScript?你在使用不同世紀的日期嗎?您鏈接的代碼看起來非常複雜,比如'Calendar.setTimeInMillis((julian_day - 2440587.5)* 86400000)'和'(Calendar.getTimeInMillis()/ 86400000)+ 2440587.5'(我沒有測試過Java代碼,但你明白了)。我只是好奇! :) – some 2010-10-22 02:17:51

2
var now = new Date(); 

now.format("m/dd/yy"); 
// Returns, e.g., 6/09/07 

// Can also be used as a standalone function 
dateFormat(now, "dddd, mmmm dS, yyyy, h:MM:ss TT"); 
// Saturday, June 9th, 2007, 5:46:21 PM 

// You can use one of several named masks 
now.format("isoDateTime"); 
// 2007-06-09T17:46:21 

// ...Or add your own 
dateFormat.masks.hammerTime = 'HH:MM! "Can\'t touch this!"'; 
now.format("hammerTime"); 
// 17:46! Can't touch this! 

1

看起來像具有未知功能的方程。

f(d,m,y)=D;
其中d是當天,m月,y年和D是整數日期。不失一般性,我們可以假定這個映射應該是一對一的,即每個有效的(d,m,y)組合映射到一個唯一的正整數(> = 0),並且每個正整數都必須表示一個有效且唯一的d,m,y)元組。
因此,函數f(基於日期屬性)的最明顯選擇是自第一天起過去的天數,它滿足我們的條件。所以現在我們有邊界條件。
f(d1,m1,y1)=0; 
f(9,9,2010)= 2455449;
其中d1,m1,y1代表參考日期,如unix時間戳記中的紀元。使用明顯的函數(見上文),(d1,m1,y1)出現爲(10 5 -4713)。所以使用的DatFormat是 自4713年6月10日以來經過的天數。大約。

+0

正式勝利;-)會很高興驗證您的結果與另一個抽樣點 - user341203,你可以輸入另一個日期,並告訴我們結果? – 2010-10-21 18:15:22

+0

我認爲它應該是1月1日,4713 B.C,Julian日的時代:http://en.wikipedia.org/wiki/Julian_day#Converting_Gregorian_calendar_date_to_Julian_Day_Number – some 2010-10-21 18:49:10