鍍金池/ 問答/Java  C#  Linux/ 131460562376400000這個是啥子時間戳哦,請問各位!

131460562376400000這個是啥子時間戳哦,請問各位!

如題,我該如何把這個131460562376400000轉(zhuǎn)換為java的yyyy-mm-dd HH:mm:ss.SSS呢,試過了以下方法都不得行!

/**
     * 將C#的ticks值轉(zhuǎn)換成Java的yyyy-mm-dd HH:mm:ss.SSS
     *
     * @param ticks
     * @return
     */
    public static String fromDnetTicks2JdateString(long ticks) {
        TimeZone timeZone = TimeZone.getDefault();
        long TICKS_PER_MILLISECOND = 10000;
        long TICKS_AT_EPOCH = 621355968000000000L;
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
        Calendar calendar = Calendar.getInstance(timeZone);
        calendar.setTimeInMillis((ticks - TICKS_AT_EPOCH) / TICKS_PER_MILLISECOND);
        calendar.setTimeInMillis(calendar.getTimeInMillis() - calendar.getTimeZone().getRawOffset());
        return sdf.format(calendar.getTime());
    }
    

  

回答
編輯回答
離觴

這看起來像是filetime.
windows filetime 是 從1601-01-01T00:00:00Z開始計算,單位是100納秒,
unix timestamp 是從1970-01-01T00:00:00Z開始計算,單位是秒/毫秒,
所以從 windows filetime 轉(zhuǎn)化為 unix timestamp 的公式是

unixTimestamp = (filetime - 116444736000000000)/10000 // ms
unixTimestamp = (filetime - 116444736000000000)/10000000 //s

其中的 116444736000000000 就是 1601-01-01T00:00:00Z 到 1970-01-01T00:00:00Z 的ticks 差值了。
有unix timestamp ,在Java中應(yīng)該就是可以使用了。

2017年5月23日 02:20