使用c#System.DateTime就像c ++ time_t一样

时间:2011-03-13 16:02:57

标签: c# datetime time

在C ++中,我可以获取应用程序启动时的当前时间,我可以使用

time_t appStartTime = time(null);

然后找到它开始时的秒数差异我可以做同样的事情,然后找出差异。看起来我应该在C#net中使用“System.DateTime”,但是MSDN的解释很混乱。

如何使用System.DateTime查找应用程序启动时间与当前时间之间的时间差(以秒为单位)?

5 个答案:

答案 0 :(得分:6)

立即使用属性

DateTime startTime = DateTime.Now;

//work

DateTime currentTime = DateTime.Now;

然后只是计算差异。

currentTime - startTime;

如果您想衡量效果,请考虑使用Stopwatch

    Stopwatch stopWatch = new Stopwatch();
    stopWatch.Start();

    //work

    stopWatch.Stop();

答案 1 :(得分:2)

正如大家所说......但他们有点不对劲:-)使用DateTime.UtcNow,因为

  • 速度更快(DateTime.Now来电DateTime.UtcNow
  • 它适用于开启/关闭DST的更改。

OR

正如@Shekhar_Pro建议的那样(是的,他是对的!),使用秒表

var sw = Stopwatch.StartNew()
.... your code
sw.Stop();
var ms = sw.ElapsedMilliseconds;

var ticks = sw.ElapsedTicks;

哦......我忘记了......在某些情况下你所做的事情可能毫无价值......你知道,2011年处理器是多核的(甚至是2010 :-))...如果你的应用程序模糊不清多线程你可能更好测量:

Process.GetCurrentProcess().TotalProcessorTime

这包括使用您的应用程序使用的所有核心...因此,在使用两个核心的双核心上,每“实时”秒将“获得”2秒。

答案 2 :(得分:1)

如果您使用它来检查执行代码的性能和时间,那么最好的办法是使用StopWatch

否则System.DateTime有一个Subtract函数,可用于获取TimeSpan对象,甚至是一个简单的-(减法)运算符。 然后,该TimeSpan对象具有可以使用的TotalSeconds属性。

答案 3 :(得分:1)

有几种方法可以做到这一点:

  • 使用DateTime.Now。减法生成TimeSpan。采用8字节存储,时间长达8000年,分辨率为1毫秒,但在大多数机器上精确到1/64秒。

  • 使用Environment.TickCount。与time_t类似,但与机器启动时间相关。占用4个字节的存储空间,最多24天(演员阵容为49),分辨率和准确度与DateTime相同。

  • 使用秒表。存储在堆上,分辨率取决于机器,但几乎总是低于一微秒。准确性通常不是很好,但重复得体,假设+/- 5%。最好用于测量小间隔以进行比较。

  • 使用timeGetTime。这需要pinvoke使用这个多媒体计时器。与Environment.TickCount类似,使用timeBeginPeriod可以获得1毫秒的精度。这不便宜,因为它具有系统范围的效果。最好避免。

请记住,流程执行受整体操作系统负载的影响,您的程序正在与正在运行的其他70多个进程共享资源。 DateTime或TickCount都具有足够的准确性。

答案 4 :(得分:0)

DateTime startTime = DateTime.Now;
//some code
TimeSpan difference = DateTime.Now - startTime;
int seconds = difference.TotalSeconds.Truncate();