131460562376400000这个是啥子时间戳哦,请问各位!

如题,我该如何把这个131460562376400000转换为java的yyyy-mm-dd HH:mm:ss.SSS呢,试过了以下方法都不得行!

/**
     * 将C#的ticks值转换成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());
    }
    

  

阅读 2.5k
1 个回答

这看起来像是filetime.
windows filetime 是 从1601-01-01T00:00:00Z开始计算,单位是100纳秒,
unix timestamp 是从1970-01-01T00:00:00Z开始计算,单位是秒/毫秒,
所以从 windows filetime 转化为 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中应该就是可以使用了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题