C# Unix时间戳函数未返回预期的时间戳,时区错误?
我使用一个自定义函数获取当前日期并减去天数,然后以unix格式返回时间戳。除预期输出不正确外,所有转换都正常工作。我想通过设置 DateTimeDateTime.UtcNow.Year,DateTime.UtcNow.Month,DateTime.UtcNow.Day,0,0,0 到0,0,0,它会给我那一天的午夜,但它给了我格林威治标准时间早上5点 我的自定义功能:C# Unix时间戳函数未返回预期的时间戳,时区错误?,c#,asp.net,datetime,unix,C#,Asp.net,Datetime,Unix,我使用一个自定义函数获取当前日期并减去天数,然后以unix格式返回时间戳。除预期输出不正确外,所有转换都正常工作。我想通过设置 DateTimeDateTime.UtcNow.Year,DateTime.UtcNow.Month,DateTime.UtcNow.Day,0,0,0 到0,0,0,它会给我那一天的午夜,但它给了我格林威治标准时间早上5点 我的自定义功能: public static int getUnixTimestamp(int days) { // Date to co
public static int getUnixTimestamp(int days) {
// Date to convert
DateTime dateTime = new DateTime(DateTime.UtcNow.Year, DateTime.UtcNow.Month, DateTime.UtcNow.Day, 0, 0, 0).AddDays(-days);
return (int)(TimeZoneInfo.ConvertTimeToUtc(dateTime) -
new DateTime(1970, 1, 1, 0, 0, 0, 0, System.DateTimeKind.Utc)).TotalSeconds;
}
任何关于导致这种情况的想法或反馈都将非常好,谢谢 调用DateTime构造函数时没有指定种类,然后调用ConvertTimeToUtc。这将假设dateTime实际上是本地的,并将其转换为UTC。考虑到您已经在使用UTC值构建它,您不需要转换它
您有一个单独的问题,即调用DateTime.UtcNow几次-这些调用之间的日期可能会更改。最好使用DateTime.UtcNow.Date获取UTC日期中的今天
下面是更好的代码:
private static readonly DateTime UnixEpoch =
new DateTime(1970, 1, 1, 0, 0, 0, 0, System.DateTimeKind.Utc);
// TODO: Give this a clearer name
public static int GetUnixTimestamp(int days)
=> (int) ((DateTime.UtcNow.Date.AddDays(-days) - UnixEpoch).TotalSeconds);
重要的是,DateTime.UtcNow.Date.AddDays-days的类型仍然是DateTimeKind.Utc。Unix时间戳不是从纪元算起的秒,不是天吗?@silkfire这不重要,我不认为,我正在将DateTime转换为Unix时间戳。抱歉,错过了这一部分。您是否尝试过.NET v4.6中提供的DateTimeOffset.ToUnixTimeSeconds方法?@silkfire很遗憾,我的项目位于.NET 2上,我没有更新到4+的选项。不过,拥有这样的架构真是太好了。什么样的公司使用这样一个旧框架;谢谢你的解释!将在可用时接受。