我正在编写一个从APC UPS获取SNMP数据的应用程序,我想对这些数据做些什么。
我将以这种格式获得一些信息:
0d 2h 5m 45s 0ms
如果该值低于30分钟(总时间 - 包括天数和小时数),我希望能够做点什么。
如果我可以将该字符串转换为DateTime,那么我可以对其进行计算。
我想我正在寻找将该字符串添加到Now()...这样我可以查询它未来的距离。
我希望这有道理吗?
在我看来,代码看起来像这样:
Dim timeNow As DateTime = Now
Dim snmpRuntimeRemaining As DateTime = Now + snmpDataTime
Dim runtimeRemaining As TimeSpan = snmpRuntimeRemaining - timeNow
If runtimeRemaining.TotalMinutes >= 30 Then Do Something
答案 0 :(得分:2)
添加到.Now():
var t = new TimeSpan(days, hours, minutes, seconds, milliseconds);
var d = DateTime.Now + t;
您可以使用指定的Regex组来使用天数,小时数等:
var r = new Regex(@"(?<days>\d+)d (?<hours>\d+)h...");
var m = r.Match(input);
var days = m.Groups["days"].Value;
PS你不需要实际添加。现在,你可以这样做:
var t1 = (as above)
var t2 = Timespan.FromMinutes(30);
if(t1 < t2) doSth(); // if timespan from string is less (shorter) than 30 minutes
代码在C#中,但我认为您可以轻松地进行调整:)
答案 1 :(得分:0)
我走了一条与Regex略有不同的路线,它需要整理 - 但这就是我的做法:
Dim snmpTimeDate As String = "0d 2h 5m 45s 0ms"
Dim split() As String = snmpTimeDate.Split(" ")
Dim days As String = split(0).Replace("d", "")
Dim hours As String = split(1).Replace("h", "")
Dim minutes As String = split(2).Replace("m", "")
Dim seconds As String = split(3).Replace("s", "")
Dim miliseconds As String = split(4).Replace("ms", "")
Dim snmpToTimeSpan = New TimeSpan(days, hours, minutes, seconds, miliseconds)
Dim snmpDateTime = DateTime.Now + snmpToTimeSpan
Dim runtimeRemaining As TimeSpan = snmpDateTime - DateTime.Now
If runtimeRemaining.TotalMinutes >= 30 Then Do Something
感谢Gerino的帮助!