从字符串中提取时间
本文关键字:取时间 提取 字符串 | 更新日期: 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
这就是你所追求的吗?