获取并解析远程日期时间值

时间:2010-11-17 15:12:55

标签: c# datetime

我正在尝试获取远程系统时间(基于another post)并最终将本地系统时间设置为与远程系统时间相同。但我试图显示值和数据时间值的差异(本地与远程)。但是当我尝试在远程系统输出的日期格式上执行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 个答案:

答案 0 :(得分:1)

非常奇怪的错误。

尝试在代码中添加另一个y,因为年份有4个小部件。适合我。

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

答案 1 :(得分:0)

在日期时间格式字符串的所有引用上添加额外的“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的时候。

答案 2 :(得分:0)

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();
            }
        }