【问题标题】:Convert java.util.Date object into a Windows FILETIME structure将 java.util.Date 对象转换为 Windows FILETIME 结构
【发布时间】:2010-08-11 14:55:06
【问题描述】:

我有一个 Java 应用程序,我需要使用 JNA 调用一个 Windows DLL。我需要调用的函数实际上需要一个__int64(在内部它将它拆分为FILETIME 结构的低/高部分)。给定一个java.util.Date 对象,如何将其转换为为FILETIME 格式化的适当值?

【问题讨论】:

    标签: java winapi jna


    【解决方案1】:

    这就是使用 Java nio 的方法

        BasicFileAttributes attr = Files.readAttributes(filePath, BasicFileAttributes.class);
        DateFormat df = new SimpleDateFormat("yyyy/MM/dd");
        Date d = new Date(attr.creationTime().toMillis()); //attr.creationTime() returns a FileTime             
        System.out.println(df.format(d));
    

    【讨论】:

      【解决方案2】:

      好的,我想我想通了:

      long date = (new Date().getTime() + 11644473600000L) * 10000L;
      

      【讨论】:

      • 感谢这个想法。我永远不会这样想。非常感谢。
      • 想详细说明您是如何提出11644473600000L的?
      • @HairOfTheDog 这是从 1601 纪元 (Windows FILETIME base) 到 1970 纪元(Unix 时间)的偏移量,以毫秒为单位。 369 年,其中包括 89 个闰年,所以 369L * 365L + 89L) * 86400L * 1000L
      【解决方案3】:

      JNA 在位于 Platform jar 中的 FILETIME 类上提供了一些静态方法。

      FILETIME.dateToFileTime( Date date );
      FILETIME.filetimeToDate( int high, int low );
      

      【讨论】:

      猜你喜欢
      • 2011-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-11
      • 2019-04-25
      • 1970-01-01
      • 2021-03-10
      • 1970-01-01
      相关资源
      最近更新 更多