You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写从0:0:0:0启动的Timer?修改现有Timer计时起始值求助

解决方案:让Timer输出累计计时而非当前系统时间

这个问题很容易搞定,核心思路是记录Timer的启动初始时刻,每次Elapsed事件触发时,计算当前时间与初始时刻的时间差,再将这个时间差格式成你想要的00:00:00.000累计计时格式。

具体修改步骤如下:

  1. 添加私有字段存储启动时间:在你的类中新增一个DateTime类型字段,用来保存Timer开始运行的时刻。
  2. 初始化启动时间:在启动Timer之前,把这个字段赋值为当前系统时间(也就是Timer计时的起点)。
  3. 修改Elapsed事件逻辑:不再直接输出当前系统时间,而是计算时间差并格式化输出。

修改后的完整代码示例

using System;
using System.Timers;

public class TimerExample
{
    // 新增字段:存储Timer启动的初始时刻
    private DateTime _startTime;
    private Timer _timer;

    public TimerExample()
    {
        _timer = new Timer(1000); // 这里间隔设为1秒,可根据你的需求调整
        _timer.Elapsed += OnTimerElapsed;
    }

    public void StartTimer()
    {
        // 记录启动时刻
        _startTime = DateTime.Now;
        _timer.Start();
        Console.WriteLine("Timer started, counting from 00:00:00.000");
    }

    private void OnTimerElapsed(object sender, ElapsedEventArgs e)
    {
        // 计算从启动到当前的累计时间差
        TimeSpan elapsedTime = DateTime.Now - _startTime;
        // 格式化时间差为"hh:mm:ss.fff"格式
        string formattedTime = elapsedTime.ToString(@"hh\:mm\:ss\.fff");
        Console.WriteLine($"The Elapsed event was raised at {formattedTime}");
    }

    // 可选:停止Timer的方法
    public void StopTimer()
    {
        _timer.Stop();
        Console.WriteLine("Timer stopped");
    }

    public static void Main()
    {
        TimerExample example = new TimerExample();
        example.StartTimer();
        Console.WriteLine("Press any key to stop...");
        Console.ReadKey();
        example.StopTimer();
    }
}

关键说明

  • 时间差计算:TimeSpan类型专门用来表示时间间隔,通过DateTime.Now - _startTime可以精准得到从Timer启动到当前事件触发的累计时长。
  • 格式化字符串:@"hh\:mm\:ss\.fff"是自定义时间格式,其中:
    • hh:两位小时数(如果累计时间超过24小时,会自动循环;若需要显示超过24的小时数,可改用HH或者d\.hh来显示天数+小时)
    • mm:两位分钟数
    • ss:两位秒数
    • fff:三位毫秒数
    • 反斜杠\用来转义冒号和点号,确保它们作为普通字符输出。

这样修改后,你的Timer就会输出从00:00:00.xxx开始的累计计时,完全符合你的需求啦!

内容的提问来源于stack exchange,提问作者user9630194

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 02:27:41