Похоже, вы предполагаете, что time_t
является 32-разрядным в 32-разрядных системах, и это может или не может быть правдой.
В Windows, начиная с Visual Studio 2005, размерtime_t
является 64-битным, даже когда вы компилируете для 32-битной Windows.
К сожалению, glibc определяет его как long int
, что в 32-битных системах является 32-битным целым числом.Это означает, что 32-битная Linux и другие 32-битные платформы, основанные на gcc / glibc (например, Cygwin), не смогут работать с 64-битными метками времени.
Если ваше приложение должно работать на 32-бит glibc, тогда вы должны использовать свои собственные функции преобразования, которые могут быть теми же функциями в библиотеке C, перекомпилированной для использования 64-битных временных меток.
Если вам нужен исходный код с разрешающей лицензией (BSD), вы можете посмотреть на эти функции в minix3. Здесь по местному времени.Источник гиперссылок, поэтому вы можете легко найти остальные.