我正在尝试获取远程系统时间(基于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);
}
答案 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();
}
}