Получение и анализ удаленного значения даты и времени - PullRequest
0 голосов
/ 17 ноября 2010

Я пытаюсь получить время удаленной системы (на основе другой пост ) и в конечном итоге установить время локальной системы равное времени удаленной системы. Но я пытаюсь сделать некоторые показы значений и разницу значений времени данных (локальный против удаленного). Но когда я пытаюсь сделать ParseExact в формате даты, который выводит удаленная система, я получаю ошибка, что это недопустимое время даты. Теперь, когда я пытаюсь сделать это в C #, я очень открыт для другого языка, который я могу написать, используя VS 2010.

Вот код, который я использую до сих пор.

private void GetTime_Click(object sender, EventArgs e)
{
    var st = DateTime.Now.ToString("ddd MMM dd hh:mm:ss yyy");

    System.Net.Sockets.TcpClient t = new System.Net.Sockets.TcpClient("10.10.10.10", 13);
    System.IO.StreamReader rd = new System.IO.StreamReader(t.GetStream());
    var rt = rd.ReadLine();

    DateTime startTime = ParseDateTime(st) ?? DateTime.Now;
    DateTime endTime = ParseDateTime(rt) ?? DateTime.Now;
    TimeSpan span = endTime.Subtract(startTime);
    var ts = span.Seconds;

    remoteTime.Text = rt;
    systemTime.Text = st;
    timeDiff.Text = ts.ToString();

    rd.Close();
    t.Close();
}

public static DateTime? ParseDateTime(string value)
{
    CultureInfo culture = CultureInfo.CreateSpecificCulture("en-US");
    DateTimeStyles styles = DateTimeStyles.None;

    return DateTime.ParseExact(value, "ddd MMM dd hh:mm:ss yyy", culture, styles);
}

Ответы [ 3 ]

1 голос
/ 17 ноября 2010

Очень странная ошибка.

Попробуйте добавить еще один y к своему коду, так как год содержит 4 диджета.у меня работает.

return DateTime.ParseExact(value, "ddd MMM dd hh:mm:ss yyyy", culture, styles);
0 голосов
/ 20 октября 2013
class RemoteSystemTime 
    {
        static void Main(string[] args)
        {
            try
            {
                string machineName = "vista-pc";

                System.Diagnostics.Process proc = new System.Diagnostics.Process();
                proc.StartInfo.UseShellExecute = false;
                proc.StartInfo.RedirectStandardOutput = true;
                proc.StartInfo.FileName = "net";
                proc.StartInfo.Arguments = @"time \\" + machineName;
                proc.Start();
                proc.WaitForExit();

                List<string> results = new List<string>();
                while (!proc.StandardOutput.EndOfStream)
                {
                    string currentline = proc.StandardOutput.ReadLine();
                    if (!string.IsNullOrEmpty(currentline))
                    {
                        results.Add(currentline);
                    }
                }

                string currentTime = string.Empty;
                if (results.Count > 0 && results[0].ToLower().StartsWith(@"current time at \\" +                                               machineName.ToLower() + " is "))
                {
                    currentTime = results[0].Substring((@"current time at \\" + machineName.ToLower() + " is                             ").Length);

                    Console.WriteLine(DateTime.Parse(currentTime));
                    Console.ReadLine();
                }

            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                Console.ReadLine();
            }
        }
0 голосов
/ 17 ноября 2010

Добавьте дополнительный 'y' на все ссылки ваших строк формата даты и времени.Это включает в себя эту строку:

var st = DateTime.Now.ToString("ddd MMM dd hh:mm:ss yyy");

и эту строку:

return DateTime.ParseExact(value, "ddd MMM dd hh:mm:ss yyy", culture, styles);

, а также если / когда вы, когда вы делаете TryParse позже в коде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...