15

Googleブックマークによって生成されたエクスポートファイルからブックマークを解析する作業を行っています。このファイルには、次の日付属性が含まれています。

ADD_DATE="1231721701079000"

ADD_DATE="1227217588219000"

これらは、標準的な UNIX スタイルのタイムスタンプではありません。誰かがここで私を正しい方向に向けることができますか? あなたが本当に私を助けたいと感じているなら、私はc#を使ってそれらを解析します.

4

9 に答える 9

19

Chrome では、修正された Windows タイム形式 (“<a href="http://blogs.msdn.com/b/oldnewthing/archive/2009/03/06/9461176.aspx" rel="noreferrer">WindowsBookmarksファイルと履歴ファイルの両方で、そのタイムスタンプのエポック」) 。Windows Time 形式は、1601 年 1 月 1 日からの 100ns-es の数値です。Chrome 形式は、同じ日付からのマイクロ秒数であるため、1/10 になります。

Chrome タイムスタンプを Unix エポックとの間で変換するには、秒に変換し、2 つの基本日時 (11644473600) の差を補正する必要があります。

Unix、JavaScript (Unix はミリ秒単位)、Windows、および Chrome のタイムスタンプの変換式は次のとおりです (+/× と -/÷ を並べ替えることができますが、精度が少し失われます)。

u :  Unix       timestamp    eg: 1378615325
j :  JavaScript timestamp    eg: 1378615325177
c :  Chrome     timestamp    eg: 13902597987770000
w :  Windows    timestamp    eg: 139025979877700000

u =  (j / 1000)
u =  (c - 116444736000000)   / 10000000
u =  (w - 1164447360000000)  / 100000000

j =  (u * 1000)
j =  (c - 116444736000000)   / 10000
j =  (w - 1164447360000000)  / 100000

c =  (u * 10000000)          + 116444736000000
c =  (j * 10000)             + 116444736000000
c =  (w / 10)

w =  (u * 100000000)         + 1164447360000000
w =  (j * 100000)            + 1164447360000000
w =  (c * 10)

これらは非常に大きな数値であるため、64 ビットの数値を使用するか、PHP の BC-math モジュールのように文字列として処理する必要があることに注意してください。

于 2013-09-08T14:45:46.320 に答える
8

Javascript では、コードは次のようになります

function chromeDtToDate(st_dt) {
   var microseconds = parseInt(st_dt, 10);
   var millis = microseconds / 1000;
   var past = new Date(1601, 0, 1).getTime();
   return new Date(past + millis);
}
于 2015-11-25T16:35:13.410 に答える
7

1231721701079000 は、1970 年 1 月 1 日からの時間 (マイクロ秒単位) に疑わしく見えます。

perl -wle 'print scalar gmtime(1231721701079000/1_000_000)'
Mon Jan 12 00:55:01 2009

既知の時間にいくつかのブックマークを作成し、確認するために試してみました。

于 2009-02-12T03:40:31.727 に答える
1

最初に見たところ、下の 6 桁を切り落とすと、オンライン コンバーターを使用して妥当な Unix Date が得られるように見えます。

1231721701 = 2009 年 1 月 12 日月曜日 00:55:01 GMT

1227217588 = 2008 年 11 月 20 日木曜日 21:46:28 GMT

余分な 6 桁は、フォーマット関連またはある種の拡張属性である可能性があります。

Unix タイムスタンプの変換が実際にそうである場合、サンプル コードがいくつかあります。

于 2009-02-12T03:38:18.890 に答える
1

コード サンプルについては、こちらを参照してください: http://www.epochconverter.com/#code

// my groovy (java) code finally came out as:

def convertDate(def epoch)

{

    long dv = epoch / 1000; // divide by 1,000 to avoid milliseconds

    String dt = new java.text.SimpleDateFormat("dd/MMM/yyyy HH:mm:ss").format(new java.util.Date (dv));

   // to get epoch date: 

   //long epoch = new java.text.SimpleDateFormat("MM/dd/yyyy HH:mm:ss").parse("01/01/1970 01:00:00").getTime() * 1000;

    return dt;

} // end of def

したがって、jsonとしてエクスポートされたFirefoxのブックマークの日付は私に与えました:

json.lastModified :1366313580447014

convert from epoch date:18/Apr/2013 21:33:00

から :

println "convert from epoch date:"+convertDate(json.lastModified)
于 2013-05-01T11:27:42.740 に答える
0
function ConvertToDateTime(srcChromeBookmarkDate) {
    //Hp --> The base date which google chrome considers while adding bookmarks
    var baseDate = new Date(1601, 0, 1);

    //Hp --> Total number of seconds in a day.
    var totalSecondsPerDay = 86400;

    //Hp --> Read total number of days and seconds from source chrome bookmark date.
    var quotient = Math.floor(srcChromeBookmarkDate / 1000000);
    var totalNoOfDays = Math.floor(quotient / totalSecondsPerDay);
    var totalNoOfSeconds = quotient % totalSecondsPerDay;

    //Hp --> Add total number of days to base google chrome date.
    var targetDate =  new Date(baseDate.setDate(baseDate.getDate() + totalNoOfDays));

    //Hp --> Add total number of seconds to target date.
    return new Date(targetDate.setSeconds(targetDate.getSeconds() + totalNoOfSeconds));
}

var myDate = ConvertToDateTime(13236951113528894);
var alert(myDate);
//Thu Jun 18 2020 10:51:53 GMT+0100 (Irish Standard Time)
于 2020-06-18T14:40:16.797 に答える