2013-04-12 83 views
-2

在我的系統中,時間戳使用舊的IBM JULIAN格式返回。JDE/Julian時間:如何格式化JULIAN時間戳編號

例如:
12時0分以及1秒AM(午夜後1秒),返回01.
12時22分15秒AM返回2215
1 O」時鐘22分15秒AM返回12215.
7時45分鐘,1秒AM返回74501.
7點22分15秒PM返回192215.

我需要一個正則表達式將它們放入以下格式:
12 o'cloc k 0分1秒AM(午夜後1秒):00:00.01
12點22分15秒AM:00:22.15
1點22分15秒AM:01:22.15
7時45分鐘,1秒AM:7:45.01
7點22分15秒PM:19:22.15

任何幫助理解。

SOLUTION 感謝MikeM,這裏是解決方案:

//var time = '01'; 
//var time = '2215'; 
//var time = '12215'; 
//var time = '74501'; 
var time = '192215'; 

time = time.replace(/^(?:(?:(\d)?(\d))?(\d\d))?(\d\d)$/, 
    function (all, hr1, hr2, min, sec) { 
    return (hr1 || '0') + (hr2 || '0') + ':' + (min || '00') + '.' + sec; 
    } 
); 
+0

爲什麼我低估了這個問題:http://meta.stackexchange.com/a/149138/133242 –

+0

01:01:01怎麼回來? –

+0

只使用正則表達式是不夠的。現有資源可以輕鬆回答您的問題:https://www.google.ca/#hl=zh-CN&sclient=psy-ab&q=julian+to+date+javascript&oq=julian+to+date+javascript – sweetamylase

回答

2

下面與您的實例作品,雖然我沒有測試它超出了

//var time = '01'; 
//var time = '2215'; 
//var time = '12215'; 
//var time = '74501'; 
var time = '192215'; 

time = time.replace(/^(?:(?:(\d)?(\d))?(\d\d))?(\d\d)$/, 
    function (all, hr1, hr2, min, sec) { 
    return (hr1 || '0') + (hr2 || '0') + ':' + (min || '00') + '.' + sec; 
    } 
); 

雖然它給人07:45.017:45.01,以符合01:22.15

+1

這是一個了不起的正則表達式 –

+0

正則表達式是一個美麗的東西。 MikeM,謝謝你的完美解決方案! – radi8

1

我給你一個線索:

  1. 轉換返回值給一個號碼。
  2. num%100是秒。
  3. (num/100)%100是分鐘數。
  4. (num/10000)是小時。
  5. 如果小時小於12,使用AM
  6. 如果小時是12個或更多,可以使用PM並且進一步地,如果它的13個或更多,減去12

另一種方式來做到這一點是將其視爲一個字符串。但是你必須添加足夠多的前導零來達到長度6,然後將其分解成2個字符位並將它們轉換爲'int',這樣做的方式不僅僅是模擬100以及跳躍100和10,000。

從來就應該是在這兩個數字部分的值大於59

注意

@ radi8發現了一些我離開了。我應該注意到,上述算法中的「/」(除法)必須是整數算術才能正確工作。一些編程語言提供整數運算。 JavaScript不。

由於JavaScript使用浮點運算,他減去分割前的秒數。然後類似的分鐘數的減法修復了下一步。

你也可以使用Math.floor()分割後完成同樣的事情(因爲這些都是正數)。

這裏是OP的代碼修改爲做到這一點:

$(function() { 
    var val1 = 41215,hr=0,min=0,sec=0; 
    sec = val1%100; 
    val1 = Math.floor(val1/100); 
    min = val1%100; 
    hr = Math.floor(val1/100); 
    // format the result. This example could show 1:1:1 instead of 01:01:01 
    tst2 = hr.toString()+':'+min.toString()+'.'+sec.toString(); 
    alert(tst2.toString()); 
}); 
+0

分鐘只有59分鐘。李馬多爾,非常感謝,這將讓我走。我正在沿着那個做子串的可怕之路走下去,它太醜了。謝謝大家! – radi8

+0

相信我!如果傳入的格式符合我的想法,它將會起作用。 –

+0

在任何情況下,我都不認爲數字計算本身就是正確的答案。我們正在處理IEEE-754「雙精度」浮點值。後來,OP已經明確了格式;我沒有看到你正在處理「年」和「一年中的每一天」組件。 – PointedEars