从字符串中提取时间

本文关键字:取时间 提取 字符串 | 更新日期: 2023-09-27 17:55:47

>我有这个字符串,它是 cmd 中 net 时间 ''SERVER_NAME 命令的结果:

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

命令已成功完成。

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

编辑

我绝对想使用正则表达式,此命令不仅针对一台服务器运行。

编辑 2

我最终选择了本文档中介绍的 API(http://msdn.microsoft.com/en-us/library/aa370612(v=vs.85).aspx),因为它使用的是 NTP,因此它本质上是一个可靠的 API。

从字符串中提取时间

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

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

相反,请考虑使用 NetRemoteTOD 函数。可能有托管版本,但如果没有,您可以使用 P/Invoke 调用它 - 请参阅相关的 pinvoke.net 条目。这将允许您在没有任何文本处理的情况下获得适当的值,从而使事情更加干净。

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

好吧,我会使用 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 与服务器通信 - 我真的希望有一种方法可以在不使用文本处理的情况下做到这一点......

如果你真的,

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

仅匹配时间的最简单的正则表达式如下所示:

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

这就是你所追求的吗?