【问题标题】:what is c time_t equivalent for c#c#的c time_t等价物是什么
【发布时间】:2011-06-08 06:16:27
【问题描述】:

有一个用 c 编写的来自 dll 的本地方法,它采用 time_t 类型的参数。 这个参数是否可以使用 C# uint 或 ulong?

【问题讨论】:

    标签: c# c time types


    【解决方案1】:

    我不认为我应该说它们是等价的,但是您可以通过这种方式将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

    【讨论】:

    • 最方便的方式
    • @jheriko 非常感谢您的评论。我已经说过这不是等效的。但是,在这里看到这个答案有一些赞成,我相信这个答案给了一些人一些想法并帮助了他们。你能告诉我哪里不对吗?
    • 对不起,我太矮了。我一直在寻找解决这个问题的方法,最后使用 p/invoke 从 msvcrt 调用
    • 但我最初的观点本可以更好地表达为“实际上不起作用”。展示几乎可行的东西很有趣,但这不是答案。它也远离“time_t 的大小?”的问题。这基本上就是这里要问的。
    • @jheriko 感谢您的解释,对不起,在这个例子中哪一部分完全不起作用?在这种情况下,AntonK 说“最方便的方式”是在讽刺吗?
    【解决方案2】:

    取决于在编译 DLL 的标准 C 头文件中如何定义 time_t。

    如果 time_t 是 64 位,则 C# 等效项是 long。

    如果time_t 是 32 位的,那么它有 2038 年的错误,您应该询问编写 DLL 的人以获得无错误版本。

    【讨论】:

      【解决方案3】:

      根据Wikipedia's article on Time_t,您可以使用integer (Int32 or Int64)

      Unix 和 POSIX 兼容系统将 time_t 实现为整数或实浮点类型(通常为 32 位或 64 位整数),表示自 Unix 纪元开始以来的秒数:UTC 时间 1 月午夜1970 年 1 月(不计算闰秒)。

      【讨论】:

        【解决方案4】:

        Bastardo 的解决方案对我没有帮助。我遇到了 DST 问题,因此需要额外转换为本地时间,或者结果时间相差一小时。我就是这样做的:

        return new DateTime(1970, 1, 1).ToLocalTime().AddSeconds(time_t);
        

        【讨论】:

        • 对我来说它只能这样工作:return new DateTime(1970, 1, 1).AddSeconds(time_t).ToLocalTime();
        • 或者更好,new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Local).AddSeconds(time_t)
        • 好电话。如果您愿意,我会编辑我的答案以使用它。
        猜你喜欢
        • 2014-05-08
        • 1970-01-01
        • 2011-01-19
        • 2010-12-07
        • 2010-12-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多