need a help subtract DateTimePicker - vb.net

I need to subtract DateTimePicker1 - DateTimePicker2
DateTimePicker1 get infornet from The man who ran the software
DateTimePicker2 get infornet from The man who ran the software
The Datetimekiper is like (HH:mm d/M/y)
the date is because its can take 4 days.
so the hour can be 72- 96
I just need the numbers of hours and minutes.

You need to be handling the DateTime value, not the control itself.
try something like this:
Dim x = DateTimePicker1.value - DateTimePicker2.value
and then this x will have the timespan, so you can get total hours like this:
Dim hours = x.TotalHours

Related

How to subtract Time in Excel VBA?

How do I subtract Time in Excel VBA?
I tried to subtract these two values, but I'm getting this value "2.1527777777778E-02" instead. What does this mean?
Timein = 12/7/16 12:00:00 AM
Timeout = 12/7/16 12:30:00 AM
Here's a sample of my code. Thanks in advance.
Dim Total as Double
Dim Timein as Date
Dim Timeout as Date
Total = TimeValue(Timeout) - TimeValue(Timein)
'Result Total=2.1527777777778E-02
You can use the DateDiff Function to get the difference in year/days/seconds or whatever.
Here the example for minutes.
Dim Timein As Date
Dim Timeout As Date
Timein = "12/7/16 12:00:00 AM"
Timeout = "12/7/16 12:30:00 AM"
Debug.Print DateDiff("n", Timein, Timeout)
Output:
30
Interval Explanation
yyyy Year
q Quarter
m Month
y Day of year
d Day
w Weekday
ww Week
h Hour
n Minute
s Second
What you have done is perfectly correct, as can be seen by the following code:
Sub test()
Dim Total As Double
Dim Timein As Date
Dim Timeout As Date
Timein = CDate(Range("A1").Value)
Timeout = CDate(Range("A2").Value)
Total = TimeValue(Timeout) - TimeValue(Timein)
Debug.Print Total
Debug.Print Format(Total, "hh:mm:ss")
Range("A3").NumberFormat = "hh:mm:ss"
Range("A3").Value = Total
Debug.Print "Number of hours = " & Total * 24
End Sub
As mentioned by vacip in a comment, Date/Time variables are stored in VBA in "days" so, for example, Now for me is the number 42867.7513310185.
2.1527777777778E-02 is using a method of displaying a value called Scientific Notation. In your case, it means 2.1527777777778 times 10 to the power of -2. Or you could think of the E-02 part as meaning shift the decimal point two places to the left (left because it's negative).
So: 0.021527777777778.
Excel treats time (both dates and times of day) as whole days so half a day (12 hours) would be represented as 0.5.
So the result itself represents the decimal fraction of an entire day, if you want this in minutes for example, you would multiply the value by 1440 (24hr x 60min make a day) which would give you 31mins.
In your example, you're finding the difference between 12:00 and 12:30 so you should actually be getting a result of 2.08333333333333E-02 which if multiplied by 1440 would give you 30mins.
Excel gives you tools to find the difference between two points in time though that take all that complex math(s) away - DateDiff and #holger has given you everything you need there to write your own code.
You have defined the total as double, which returns you number. you need to dim the total as date so that returns you a time.
Dim Total as Date
Dim Timein as Date
Dim Timeout as Date
Total = TimeValue(Timeout) - TimeValue(Timein)

What exactly happens if I add two dates in VBA

Please help me what happend here- I know it is stupid but I want to know.
The output of the below code is April-18-2105. How did it pop up?
Private Sub CommandButton1_Click()
Dim firstDate As Date, secondDate As Date
firstDate = DateValue("Jun 19, 2010")
secondDate = DateValue("oct 29,1994")
MsgBox (firstDate + secondDate)
End Sub
Thanks in advance!
Dates are actually stored as numbers, so if we look at the numeric value for these dates:
CLng(datevalue("Jun 19, 2010")) '// 40348
CLng(datevalue("oct 29, 1994")) '// 34636
and add them together:
40348 + 34636 = 74984
and convert that number back to a date:
CDate(74984) '// 18/04/2105
Because it's 74,984 days after 00/01/1900
dates are numbers, formatted as dd/mm/yyyy, I think its the days from 31/12/1899, so that's what's happening. The result is 40348+34636=74984, which is 18/04/2105.
Excel stores the date as the number days after a specified date. As such the integer representing the date of 2010/06/19 is 40348 and the integer representing 1994/10/29 is 34636. When you add those integers together you get 74984 which is the integer that represents 2105/04/18.
The reference date does vary from mac to windows. I am running on windows and I did not change my reference date settings, That is where those integers came from. Mac uses January 2nd 1904 as day 1 and Windows uses January 1 1900 as day 1.

Subtract current track time from total track time

Hey all i have a song playing that displays the time like so:
0:00 / 4:47
The first time is the tracks current time.
The second is the total track time of that song playing.
I split it like so:
Dim tmpTimes As Array = lblSongTime.Text.Split("/")
So tmpTimes(0) gives me 0:00 and tmpTimes(1) gives me 4:47.
Now i tried to subtract the tmpTimes(1) from tmpTimes(0)
Debug.Print(CDbl(tmpTimes(1).replace(":", "") - tmpTimes(0).replace(":", "")))
and i get: 447.. 446... 445... etc
What kind of calulation do i need in order to return a decending count?
Example: 4:47...4:46.....4:45...etc using the current time tmpTimes(0)?
You need to split the text MM:SS into Minutes and Seconds, then convert that to total seconds (m * 60 + s). Then you can do the math on seconds. Then you will need to convert it back into Minutes and Seconds for display.
You may also be able to use the Timespan class to do this.
Solved:
Dim times As String() = lblSongTime.Text.Split("/"c)
Dim elapsedTime As TimeSpan = TimeSpan.ParseExact(times(0).Trim(), "m\:ss", Nothing)
Dim totalTime As TimeSpan = TimeSpan.ParseExact(times(1).Trim(), "m\:ss", Nothing)
Dim remainingTime As TimeSpan = totalTime - elapsedTime
Debug.WriteLine(remainingTime.ToString("m\:ss"))

VB Date and Datetimepicker

I was wondering what was the proper way to create a If statement for if the datetimepicker date is greater than 2 weeks from the current date.
I was thinking something along the lines of
If (datetimepicker.value > DateTimeInterval.Day(14))
but I am not sure the correct way.
You'll need to subtract the current date from the picker date. To get a TimeSpan:
If DateTimePicker1.Value.Date - DateTime.Now.Date > TimeSpan.FromDays(14) Then
'' It's more than 2 weeks
End If

Calculating Months

I have an application where the user selects the dates of a first statement and a last statement. Example, first statement = 1/1/08, last statement = 12/1/08, should equal 12 statements.
However, when using the following code, the result is 11:
numPayments = DateDiff(DateInterval.Month, CDate(.FeeStartDate), CDate(.FeeEndDate))
Is there another way to calculate this, or do I have to be stuck with adding 1 to the result?
Add 1, as you write. ;)
The difference between 1/1/2008 and 12/1/2008 is 11 months. No changing that. ;)
Yes, you'd always have to add one though you may be able to add one to the end date or subtract one from the start date to also get this effect. Consider the case where the start and end dates are the same. Their difference is 0 but you'd still want 1 statement to show just to note one odd case.
Well, the number of months between Jan 1st and Dec 1st is 11... what you're looking for is the difference of months +1. So just add one :)
Also, the DateDiff function you're using is a VB6 hold-over. Better to express it like this:
numPayments = (Date.Parse(.FeeEndDate) - Date.Parse(.FeeStartDate)).TotalMonths + 1
You could try this one. Hope this is very helpful.
Dim myDate As Date
Dim dateNow As Date
Dim nextMonth As Date
myDate = Now
dateNow = Format(myDate, "MM/dd/yyyy")
nextMonth = DateAdd(DateInterval.Month, 5, dateNow) 'compute the next 5 months from date now. Let say, #12/6/2012# the result will be #5/6/2013#
MessageBox.Show(DateDiff(DateInterval.Month, dateNow, nextMonth) & "months==> " & nextMonth)
'This will count the number of months interval. The result will be 5 months=>> #5/6/2013 because we count december to may.