【发布时间】:2011-11-05 20:05:26
【问题描述】:
有C代码:
time1=((double)dt1-25569.0)*86400.0;
它以秒为单位从 TDateTime (VCL) 转换为 time_t 格式,所以最后我需要从 .NET DateTime 获取 time_t 格式
关于时间_t:
几乎普遍认为它是一个整数值,表示 自 UTC 时间 1970 年 1 月 1 日 00:00 时起经过的秒数。这 是由于历史原因,因为它对应一个unix 时间戳,但在所有 C 库中广泛实现 平台。
为了在 .NET 中获得秒数,我正在这样做 (F#):
let seconds(dt : DateTime) =
(dt.Ticks/10000000L)
或在 C# 上(使用更流行的 C# 标签):
Int64 seonds(DateTime dt)
{ return (dt.Ticks/ ((Int64)10000000)); }
// hope it works, but please correct if I mistaken
据我了解,时间是 0001 年 1 月 1 日 12:00:00 UTC。
所以要使用 time_t 格式,我需要以秒为单位添加 1970 年。
所以最终函数必须是(F#):
let seconds(dt : DateTime) =
(dt.Ticks/10000000L) + 31536000*1970
C#:
Int64 seonds(DateTime dt)
{ return (dt.Ticks/ ((Int64)10000000)) + 31536000*1970; }
我真的害怕我在这里犯了错误。 请检查此解决方案!(检查是否正确)
谢谢
【问题讨论】:
-
我不会只添加 1970 年作为秒,因为闰年是上下文的一部分...