我已经环顾stackoverflow,甚至看了一些建议的问题,似乎没有人回答,你如何在c#中获得unix时间戳?
当前回答
如果你有一个长时间的UTC时间戳,还有一个更快的快捷方式。
/// <summary>
/// Convert Ticks to Unix Timestamp
/// </summary>
/// <param name="time"></param>
/// <returns></returns>
public static long ToUnixTimestamp(long time)
{
return (time - 621355968000000000) / TimeSpan.TicksPerMillisecond;
}
其他回答
从。net 4.6开始,就有了datetimeoffset . tounixtimesecseconds。
的实例方法,因此希望在实例上调用它 DateTimeOffset。您还可以强制转换DateTime的任何实例,但要注意 时区。获取当前时间戳:
DateTimeOffset.Now.ToUnixTimeSeconds()
从DateTime中获取时间戳:
DateTime foo = DateTime.Now;
long unixTime = ((DateTimeOffset)foo).ToUnixTimeSeconds();
在c#中使用DateTime可以获得unix时间戳。UtcNow和减去1970年1月1日的纪元时间。
e.g.
Int32 unixTimestamp = (int)DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1)).TotalSeconds;
DateTime。UtcNow可以替换为任何你想获取unix时间戳的DateTime对象。
还有一个字段DateTime。UnixEpoch,它在MSFT的文档中记录得非常少,但可以替代新的DateTime(1970,1,1)
你也可以使用Ticks。我正在为Windows Mobile编写代码,所以没有完整的方法集。我无法使用TotalSeconds。
long epochTicks = new DateTime(1970, 1, 1).Ticks;
long unixTime = ((DateTime.UtcNow.Ticks - epochTicks) / TimeSpan.TicksPerSecond);
or
TimeSpan epochTicks = new TimeSpan(new DateTime(1970, 1, 1).Ticks);
TimeSpan unixTicks = new TimeSpan(DateTime.UtcNow.Ticks) - epochTicks;
double unixTime = unixTicks.TotalSeconds;
当您从当前时间中减去1970时,请注意,时间跨度通常会有一个非零毫秒字段。如果出于某种原因,您对毫秒感兴趣,请记住这一点。
以下是我解决这个问题的方法。
DateTime now = UtcNow();
// milliseconds Not included.
DateTime nowToTheSecond = new DateTime(now.Year,now.Month,now.Day,now.Hour,now.Minute,now.Second);
TimeSpan span = (date - new DateTime(1970, 1, 1, 0, 0, 0, 0));
Assert.That(span.Milliseconds, Is.EqualTo(0)); // passes.
使用。net 6.0,使用long避免2038问题:
DateTime。UtcNow到UnixTime:
long seconds = (long)DateTime.UtcNow.Subtract(DateTime.UnixEpoch).TotalSeconds;
(seconds是一个长值,将包含自01/01/1970或UnixTime以来的秒数)
UnixTime到DateTime。UtcNow:
DateTime timestamp = DateTime.UnixEpoch.AddSeconds(seconds);
小提琴:https://dotnetfiddle.net/xNhO6q
推荐文章
- 实体框架核心:在上一个操作完成之前,在此上下文中开始的第二个操作
- 如何为构造函数定制Visual Studio的私有字段生成快捷方式?
- 如何使用JSON确保字符串是有效的JSON。网
- AppSettings从.config文件中获取值
- 通过HttpClient向REST API发布一个空体
- 如何检查IEnumerable是否为空或空?
- 自动化invokerrequired代码模式
- 在c#代码中设置WPF文本框的背景颜色
- 在c#中,什么是单子?
- c#和Java中的泛型有什么不同?和模板在c++ ?
- c#线程安全快速(est)计数器
- 如何将此foreach代码转换为Parallel.ForEach?
- 如何分裂()一个分隔字符串到一个列表<字符串>
- 如何转换列表<字符串>列表<int>?
- c#对象列表,我如何得到一个属性的和