在solaris中如何解决2038问题的时间功能

时间:2010-01-04 10:32:30

标签: c solaris

在forte编译器的Solaris 5.8中是否有任何编译器选项可以使time_t为64位。我需要以32位开发库,我无法将其更改为64位,因为它会影响现有的客户端应用程序。

2 个答案:

答案 0 :(得分:4)

Sun(尚未)为此提供任何编译器选项,而不是为64位编译。如果您只需要能够在32位应用程序中处理2038年后的日期(例如,30年抵押贷款计算)并且在Solaris内核中不需要这样的日期(例如当前时间,文件时间戳),那么您可以在应用程序中使用的包来处理此类日期。例如,y2038是一个简单的包,它提供类似64位time_t的类型以及localtime()gmtime()ctime()等的相应替换。如果你没有绑定到POSIX接口,你可以使用类似libtai的东西,它也可以处理闰秒。

答案 1 :(得分:2)

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

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