2013-08-17 2 views
-2

Я закодировал время безотказной работы в своем приложении, и это просто отображение случайных чисел?Ошибка формата строки

время программа этот код

public static DateTime TimeStarted { get; set; } 

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

, а затем это класс для отображения Провел

case "uptime": 
{ 
    TimeSpan sinceStarted = (TimeSpan)(DateTime.Now - Program.TimeStarted); 
    double secondsRunning = sinceStarted.TotalSeconds; 
    string message = string.Format("{0} Days, {1} hours, and {2} minutes", sinceStarted.Days, sinceStarted.Hours, sinceStarted.Minutes); 
    Session.SendData(UserAlertModernComposer.Compose("Stats", message)); 
    return true; 
} 

его в настоящее время говорят 735096 дней 7 часов и 34 минут, когда Провел около 20 минут,

+0

Проверьте, пожалуйста, "Program.TimeStarted" значение; вы можете протестировать его, просто навязывая «message = Program.TimeStarted.ToString()»; само форматирование кажется правильным. –

+0

где вы называете метод «Время»? – Ehsan

+1

бит TimeSpan в порядке, вы уверены, что Program.TimeStarted - это то, что вы думаете. –

ответ

0

Рассмотрите возможность использования Stopwatch class для ваших целей. Его в пространстве имен System.Diagnostics и лучше подходит для вас.

using System; 
using System.Diagnostics; 
using System.Threading; 
class Program 
{ 
    static void Main(string[] args) 
    { 
     Stopwatch stopWatch = new Stopwatch(); 
     stopWatch.Start(); 
     Thread.Sleep(10000); 
     stopWatch.Stop(); 
     // Get the elapsed time as a TimeSpan value. 
     TimeSpan ts = stopWatch.Elapsed; 

     // Format and display the TimeSpan value. 
     string elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}", 
      ts.Hours, ts.Minutes, ts.Seconds, 
      ts.Milliseconds/10); 
     Console.WriteLine("RunTime " + elapsedTime); 
    } 
} 
3

Нет необходимости хранить эту ценность. Он уже доступен в собственности Process.StartTime. Вам нужно всего лишь обратиться к текущему процессу.

Process p = Process.GetCurrentProcess(); 
TimeSpan sinceStarted = (TimeSpan)(DateTime.Now - p.StartTime); 
string message = string.Format("{0} Days, {1} hours, and {2} minutes", 
      sinceStarted.Days, sinceStarted.Hours, sinceStarted.Minutes); 
+0

ive установить, что в качестве заголовка консоли есть способ, я могу сделать это обновление автоматически? (обновить) сказать .. каждые 5-10 секунд? –

+0

используйте таймер, установите свойство интервала как таковое и обновите заголовок формы в событии Timer.Tick. [Здесь docs и пример] (http://msdn.microsoft.com/en-us/library/System.Windows.Forms.Timer.aspx) – Steve

0

Как уже упоминалось в моем комментарии, вы никогда не называете метод Time. Это означает, что TimeStarted будет иметь DateTime.MinValue. DateTime.MinValue эквивалентен 01/01/0001 00:00:00. Отсюда результат, который вы получаете.

Что вам нужно сделать, это написать следующую строку в Program.cs

Program.TimeStarted = DateTime.Now; 

Rest прекрасно