1

我已经尝试编码应用程序运行了多长时间并且它有点难所以我在这里寻求建议,在我的文件'profgram.cs'中我有一个公共日期时间女巫显示正常运行时间(我认为)

public static DateTime TimeStarted
    {
        get
        {
            return DateTime.Now;
        }
    }

当程序加载时,我有这段代码来设置时间

TimeSpan span = (TimeSpan)(DateTime.Now - TimeStarted);
Output.WriteLine("The server has initialized successfully (" + span.TotalSeconds + " seconds). Ready for connections.", OutputLevel.Notification); 

然后为了实际显示正常运行时间,我有一个显示时间跨度的案例

case "uptime":
     {
        TimeSpan span = (TimeSpan)(DateTime.Now - Program.TimeStarted);
        Session.SendData(UserAlertModernComposer.Compose("Stats", "Uptime: " + span.TotalMinutes + " minutes"));
        return true;
      }

但问题是它总是说 0 分钟?我也试过 .Minutes 不是 .Totalminutes ,它仍然可以

4

2 回答 2

3

您总是返回当前时间作为开始时间。

更改TimeStarted以便您可以设置值,然后在程序启动时设置它,例如

public static DateTime TimeStarted { get; set; }

public static void Main(string[] args)
{
    //set start time
    Program.TimeStarted = DateTime.UtcNow;
}

您可以将其用于当前流程,而不是维护自己的开始时间:

DateTime processStartedAt = System.Diagnostics.Process.GetCurrentProcess().StartTime;

要获取程序启动后的总秒数,您可以使用TotalSeconds.TimeSpan

TimeSpan sinceStarted = (DateTime.UtcNow - Program.TimeStarted);
double secondsRunning = sinceStarted.TotalSeconds;

如果要创建要显示的消息,请使用TimeSpan结构上的属性:

string message = string.Format("{0} Days, {1} hours, and {2} minutes", sinceStarted.Days, sinceStarted.Hours, sinceStarted.Minutes);

如果要定期更新控制台标题,可以使用计时器。请注意,您应该将其放在主类中,这样计时器就不会超出范围并被收集。:

private static System.Threading.Timer timer;

private static void UpdateTitle(object state)
{
    TimeSpan running = DateTime.Now - System.Diagnostics.Process.GetCurrentProcess().StartTime;
    string msg = string.Format("{0} Hours, {1} minutes, {2} seconds", running.Hours, running.Minutes, running.Seconds);
    Console.Title = msg;
}

TimeSpan updatePeriod = TimeSpan.FromSeconds(5);
timer = new System.Threading.Timer(UpdateTitle, null, TimeSpan.Zero, updatePeriod);
于 2013-08-17T11:52:18.043 回答
2

为了找出您的应用程序运行的时间,您可以尝试使用

TimeSpan span = DateTime.Now - Process.GetCurrentProcess().StartTime;
于 2013-08-17T12:12:27.487 回答