c# - 如何使用 C#/.NET 将日期时间转换为时间戳(忽略当前时区)

标签 c# asp.net timezone

如何使用 C# .NET(忽略当前时区)将日期时间转换为时间戳?

我正在使用下面的代码:

private long ConvertToTimestamp(DateTime value)
{
    long epoch = (value.ToUniversalTime().Ticks - 621355968000000000) / 10000000;
    return epoch;
}

但它根据当前时区返回时间戳值,我需要不使用当前时区的结果。

最佳答案

此刻你正在调用 ToUniversalTime() - 只是摆脱它:

private long ConvertToTimestamp(DateTime value)
{
    long epoch = (value.Ticks - 621355968000000000) / 10000000;
    return epoch;
}

或者,IMO 更具可读性:

private static readonly DateTime Epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
...

private static long ConvertToTimestamp(DateTime value)
{
    TimeSpan elapsedTime = value - Epoch;
    return (long) elapsedTime.TotalSeconds;
}

编辑:如评论中所述,执行减法时不会考虑您传入的DateTimeKind。您真的应该传入一个 KindUtc 的值,这样它才能工作。不幸的是,DateTime 在这方面有些问题 - 请参阅 my blog post (关于 DateTime 的咆哮)了解更多详情。

您可能想使用我的 Noda Time日期/时间 API,它使一切都更加清晰,IMO。

关于c# - 如何使用 C#/.NET 将日期时间转换为时间戳(忽略当前时区),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9814060/

相关文章:

c# - 如何在 WP7 上以分钟为单位获取时区偏移量?

c# - 在 Nullable DateTime 对象上调用 AddDays

c# - 查找类实现的所有接口(interface)

java - 在 Java 中,我可以将日期和时间转换为不带时区的 ISO 8601 格式的字符串吗?

javascript - 重构一些有很多重复代码的单元测试。

C# Web 服务 - 然后返回 最后 - 先发生什么

c# - 使用 COM 接口(interface)时出现 System.InvalidCastException

c# - 如何更改 Winforms 选项卡控件的背景颜色?

c# - 如何在 C# 中获取以前的 url?

c# - 在 .master 控件类型中添加的 Web 控件在子页面中找不到