代码之家  ›  专栏  ›  技术社区  ›  Andy

在Solaris中,如何修复时间函数的2038问题

  •  2
  • Andy  · 技术社区  · 15 年前

    在Forte编译器的Solaris 5.8中,是否有任何编译器选项可以使时间变为64位。我需要在32位中开发库,不能将其更改为64位,因为它会影响现有的客户机应用程序。

    2 回复  |  直到 15 年前
        1
  •  4
  •   mark4o    15 年前

    除了64位编译之外,Sun还没有为此提供任何编译器选项。如果您只需要能够在32位应用程序中处理2038年后的日期(例如,对于30年的抵押贷款计算),并且在Solaris内核中不需要这些日期(例如,当前时间、文件时间戳),那么在应用程序中可以使用包来处理这些日期。例如 y2038 是一个提供64位 time_t -类似类型和相应的替换 localtime() , gmtime() , ctime() 等等。如果您没有绑定到POSIX接口,那么可以使用类似 libtai 它还处理跳跃秒。

        2
  •  2
  •   Anya Shenanigans    15 年前

    简短的回答是“否”,编译器中没有在32位应用程序中使时间成为64位值的选项。它被扩展到64位应用程序的64位值,因为这似乎是一个很好的更改,但为了符合所有的各种标准,它必须作为32位应用程序的有符号32位值保存。

    如果要使用64位值来表示时间,则必须确保返回到现有客户机应用程序的任何值在返回时不会溢出。如果它们确实溢出了,那么您需要支持将其指定给客户机应用程序,并了解它们将如何处理这些值,这些值都是库的API的一部分。