【发布时间】:2011-03-05 21:24:16
【问题描述】:
我需要将 DateTime 转换为 Unix 时间戳。所以我googled它正在寻找一些示例代码
在我看到的几乎所有结果中,他们使用double 作为此类函数的返回值,即使显式使用floor 将其转换为整数也是如此。 Unix 时间戳总是整数。那么使用long 或int 而不是double 有什么问题呢?
static double ConvertToUnixTimestamp(DateTime date)
{
DateTime origin = new DateTime(1970, 1, 1, 0, 0, 0, 0);
TimeSpan diff = date - origin;
return Math.Floor(diff.TotalSeconds);
}
【问题讨论】:
-
恕我直言,只是不验证输入日期。它应该返回一个 long 或 ad-hoc 结构
-
没有任何原因,这只是糟糕的代码。投长,不能溢出。
-
我会补充一点,根据定义,Unix 时间戳是 UTC。该方法应检查 DateTime.Kind 是 UTC、Local 还是 Unspecified。至少,如果 Local 我会在执行转换之前转换为 UTC。或者,如果您想要一个本地的 Unix 时间戳,您可以添加一个重载或参数以不执行到 UTC 的转换。
-
@Nate,嗯是的,但对我来说没关系。
标签: c# .net datetime floating-point unix-timestamp