【发布时间】:2011-06-08 06:16:27
【问题描述】:
有一个用 c 编写的来自 dll 的本地方法,它采用 time_t 类型的参数。 这个参数是否可以使用 C# uint 或 ulong?
【问题讨论】:
有一个用 c 编写的来自 dll 的本地方法,它采用 time_t 类型的参数。 这个参数是否可以使用 C# uint 或 ulong?
【问题讨论】:
我不认为我应该说它们是等价的,但是您可以通过这种方式将t_time 转换为DateTime:
int t= 1070390676; // value of time_t in an ordinary integer
System.DateTime dt= new System.DateTime(1970,1,1).AddSeconds(t);
这个例子来自 How can I convert date-time data in time_t to C# DateTime class format?
我还应该说UInt32 用于t_time,too.check DateTime to time_t
【讨论】:
取决于在编译 DLL 的标准 C 头文件中如何定义 time_t。
如果 time_t 是 64 位,则 C# 等效项是 long。
如果time_t 是 32 位的,那么它有 2038 年的错误,您应该询问编写 DLL 的人以获得无错误版本。
【讨论】:
根据Wikipedia's article on Time_t,您可以使用integer (Int32 or Int64)
Unix 和 POSIX 兼容系统将 time_t 实现为整数或实浮点类型(通常为 32 位或 64 位整数),表示自 Unix 纪元开始以来的秒数:UTC 时间 1 月午夜1970 年 1 月(不计算闰秒)。
【讨论】:
Bastardo 的解决方案对我没有帮助。我遇到了 DST 问题,因此需要额外转换为本地时间,或者结果时间相差一小时。我就是这样做的:
return new DateTime(1970, 1, 1).ToLocalTime().AddSeconds(time_t);
【讨论】:
new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Local).AddSeconds(time_t)