从String中提取时间

时间:2014-03-31 08:45:03

标签: c# regex datetime

我的这个字符串是cmd中 net time \ _SERVER_NAME 命令的结果:

  

\ SERVER_NAME的当前时间是3/31/2014 9:35:57 AM

     

命令成功完成。

我想提取此字符串中显示的时间(本例中为上午9:35:37)。 我认为这是使用一些正则表达式完成的。有人可以帮忙吗?

修改

我绝对想要使用正则表达式,这个命令不是针对一个服务器运行的。

修改2

我最终选择了本文档中提供的API(http://msdn.microsoft.com/en-us/library/aa370612(v=vs.85).aspx),因为它使用的是NTP,所以它显然是可靠的。

2 个答案:

答案 0 :(得分:4)

获取一天中的远程时间......

如果您正试图与具有多种文化的机器交谈 - 并且如果您运行的系统的文化也可能不同 - 我强烈建议您避免使用此文本基于方法。

相反,请考虑使用NetRemoteTOD函数。可能有托管版本,但如果没有,您可以使用P / Invoke来调用它 - 请参阅relevant pinvoke.net entry。这样您就可以获得适当的值而无需任何文本处理,从而使事情变得更加清晰。

原始回答(可能对他人有用)

在确定哪个部分是实际日期/时间后,我会使用DateTime.Parse而不是正则表达式。例如:

int startIndex = text.IndexOf(" is ") + 4;
DateTime dateTime = DateTime.Parse(text.Substring(startIndex));

这将得到DateTime的值 - 然后您可以根据需要格式化时间部分,例如。

string time24 = dateTime.ToString("HH:mm:ss"); "09:35:37"
string time12 = dateTime.ToString("h:mm:ss tt"); "9:35:37 AM"

请注意,这很可能是文化敏感的;代码可能不适用于其他文化。如果你想让它更可靠,我会停止使用net time,而是使用API​​与服务器通信 - 我真的希望希望有一种方法可以做到这一点使用文本处理......

如果你真的,那么只是想要“原始字符串的任何部分是在日期之后”然后是,你可以使用正则表达式 - 但我认为解析它会更好值作为日期/时间,以确保它真正的相关数据。

答案 1 :(得分:0)

只能匹配时间的最简单的正则表达式如下:

\d\d?\:\d\d\:\d\d\s?(A|P)M

这就是你追求的目标吗?