在VB.net中将字符串转换为DateTime

时间:2015-01-16 16:56:50

标签: vb.net datetime

我正在编写一个从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

2 个答案:

答案 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的帮助!