Author  Posts 
I have a time value such as '23:10:00' to which I need to add, say, 10:00:01, but I am not interested in the time of day, just the total. Using (GetDate '23:10:00').AddHours(10) usually produces 07:10:00, ie the next day. How to I simply arrive at the total 30:10:01 without adding each individual part? 

Take your $originalTime, and create $newTime by adding your days (or whatever) to it. Then subtract $newTime – $originalTime. The result of the subtraction will be a System.TimeSpan, which has methods for expressing the time span as hours or days or whatever you want. 

Many thanks. I tried this and there was a Timespan returned, but it just showed the total I originally added. What I need is the sum of the two. I am sorry if I am missing something very basic here. 

(getdate).hour + 10 That will return the hour as an integer which you could then add hours to get a running total. Without knowing the purpose of the result, it's hard to suggest other solutions. If you want to use a date/time object, it's concerned about the date and time, so I don't think you'll find a way without adding hours, minutes and seconds separately. 

How's that? It rounds it to days though. You can leave out the second [timespan]. [timespan]'23:10:00' + [timespan]'10:00:01' 

This is workable, as I can format the TotalHours,TotalMinutes,TotalSeconds returned to a usable result. As I said earlier the result I am after here is 33:10:01 in this example. I cannot use (GetDate) as it returns an hour from the next day if the total exceeds 24 hours. [Int]$h = [Int]$m = [Int]$s = 0 function Add ([String]$test) { $temp = $test.Split(':') $SCRIPT:h+= $temp[0] $SCRIPT:m+= $temp[1] $SCRIPT:s+= $temp[2] if ($SCRIPT:s gt 59) { [Int]$min = $SCRIPT:s/60 [Int]$sec = $SCRIPT:s%60 $SCRIPT:m+= $min $SCRIPT:s = $sec } if ($SCRIPT:m gt 59) { [Int]$hour = $SCRIPT:m/60 [Int]$min = $SCRIPT:m%60 $SCRIPT:h+= $hour $SCRIPT:m = $min } } function Subtract ([String]$test) { $minus = $test.Split(':') if (($SCRIPT:s  [Int]$minus[2]) lt 0) { $SCRIPT:s+= (60  [Int]$minus[2]) [Int]$minus[1]+= 1 } else { $SCRIPT:s = $SCRIPT:s  [Int]$minus[2] } if (($SCRIPT:m  [Int]$minus[1]) lt 0) { $SCRIPT:m+= (60  [Int]$minus[1]) [Int]$minus[0]+= 1 } else { $SCRIPT:m = $SCRIPT:m  [Int]$minus[1] } $SCRIPT:h = $SCRIPT:h  $minus[0] } Add '23:43:15' Add '00:26:25' Add '12:23:29' $result = "{0:D3}:{1:D2}:{2:D2}" f $h, $m, $s WriteHost $result if ($result gt '10:45:08') { #No point trying if too large a value. Subtract '10:45:08' $result = "{0:D3}:{1:D2}:{2:D2}" f $h, $m, $s WriteHost $result } If there is a simpler way I would much appreciate it if one of you experts could please enlighten me. 

This one is simpler: $now = GetDate '23:10:00' $then = $now.AddHours(10).AddMinutes(0).AddSeconds(1) $timespan = $then  $now $hrs=[int]$now.Hour+[int]$timespan.Hours "{0:D3}:{1:D2}:{2:D2}" f $hrs,$then.Minute,$then.Second 

$result = [timespan]'23:10:00' + '10:00:01' '{0:d2}:{1:d2}:{2:d2}' f [int]$result.totalhours, $result.minutes, $result.Seconds 33:10:01 [timespan]'33:10:01' is 33 days though. 

But this fails: $result = [timespan]'24:10:00' + '10:00:01' After adding a bunch of times I often exceed 24 hours so cannot use this one. Likewise GetDate '24:10:00' throws an error. 
You must be logged in to reply to this topic.