This article covers Datetime in Visual Basic (VB.NET).
A large portion of software and applications written utilize Dates in one way or the other. Whether it’s a time based expiry, a Calendar or time management system, knowing how to create and return Dates if vital.
The Datetime class in VB.NET allows us manipulate Dates as well as Time in a variety of different ways. It also comes with several parsing functions which parse through strings to create Datetime objects. Let’s begin.
VB.NET DateTime Functions and Properties
The DateTime Class has dozens of different properties and functions, so covering them all in depth is a bit difficult. We’ll cover the most useful and common ones here, and the rest will be mentioned in a list at the end of this article.
Properties
The Today property returns the Date for the current day or “Today”. Note however, that it does not return the current time, instead returning the default time of 12:00:00 AM
.
Module Module1
Sub Main()
Dim time As DateTime = DateTime.Today
Console.WriteLine(time)
End Sub
End Module
21/05/2020 12:00:00 AM
The Now property returns both the current time and the current date. Compare this to the Today property which only returns the current date.
Module Module1
Sub Main()
Dim time As DateTime = DateTime.Now
Console.WriteLine(time)
End Sub
End Module
21/05/2020 5:58:33 PM
The DayOfWeek property returns an integer which represents which day of the week it is. The integer value will range from 1 to 7, where 1 represents Monday.
Module Module1
Sub Main()
Dim time As DayOfWeek
time = DateTime.Today.DayOfWeek
Console.WriteLine(time)
End Sub
End Module
4
This code was run on a Thursday, hence 4 was returned. There is also the DayofYear property which returns an integer value ranging from 1 to 366.
The Datetime object consists of many smaller components such as Hour and Year. These properties are used to return certain parts of the Datetime object.
Module Module1
Sub Main()
Dim time As DateTime = DateTime.Now
Console.WriteLine(time)
'Full Date
Console.WriteLine(time.Date)
'Year portion of the Date
Console.WriteLine(time.Year)
'Month portion of the Date
Console.WriteLine(time.Month)
'Day portion of the Date
Console.WriteLine(time.Day)
Console.WriteLine()
'Full Time
Console.WriteLine(time.TimeOfDay)
'Hour portion of the Time
Console.WriteLine(time.Hour)
'Minute portion of the Time
Console.WriteLine(time.Minute)
'Second portion of the Time
Console.WriteLine(time.Second)
'Millisecond portion of the Time
Console.WriteLine(time.Millisecond)
Console.Read()
End Sub
End Module
22/05/2020 5:27:34 PM
22/05/2020 12:00:00 AM
2020
5
22
17:27:34.3020342
17
27
34
302
Functions
The AddDays(n) function takes a integer as input, and adds this integer to the Datetime object it is called upon. You can use this as a way to return the Dates for the tomorrow and yesterday as shown below.
Module Module1
Sub Main()
Dim time As DateTime = DateTime.Today
Console.WriteLine(time)
Console.WriteLine(time.AddDays(1))
Console.WriteLine(time.AddDays(-1))
End Sub
End Module
21/05/2020 12:00:00 AM
22/05/2020 12:00:00 AM
20/05/2020 12:00:00 AM
The AddDays function works on all Datetime objects, not just Datetime.Today
. Furthermore, there are another dozen types of functions similar to this such as AddHours, AddDays, AddMinutes with the exact same implementation.
The DaysInMonth() Function takes two parameters, a Year and a Month. Both must be integers with the month ranging from 1 – 12. This function will accordingly return the number of days supposed to be in that month.
Module Module1
Sub Main()
Dim time As Integer
time = DateTime.DaysInMonth(2012, 2)
Console.WriteLine(time)
End Sub
End Module
29
This function accounts for Leap years as well, hence the February in 2012 has 29 days.
The Compare function compares two datetime objects and returns an integer that indicates whether the first datetime object is earlier than the second.
Module Module1
Sub Main()
Dim date1 As DateTime = New DateTime(2020, 5, 21)
Dim date2 As DateTime = New DateTime(2020, 5, 21)
Dim date3 As DateTime = New DateTime(2019, 3, 15)
Dim date4 As DateTime = New DateTime(2021, 4, 4)
Console.WriteLine(DateTime.Compare(date2, date1))
Console.WriteLine(DateTime.Compare(date2, date3))
Console.WriteLine(DateTime.Compare(date2, date4))
Console.Read()
End Sub
End Module
0
1
-1
If 1 is returned, the first datetime object is earlier than the second, otherwise -1 is returned. In the event that both dates are equal, 0 is returned.
Time Zone Functions and properties
This is a small mini section on dealing with different time zones. The core concept here is that there will be different Dates and Times for different locations around the globe, hence different Time Zones. If you have a software that depends heavily on Dates, if you don’t account for different Time zones, there will be trouble.
First step is to create the TimeZone object. The StandardName is the name of the current Time zone. The DaylightName represents the name for the DaylightSavings. That’s a topic for another day though.
Finally we use the ToLocalTime and ToUniversalTime functions to convert the current time into the appropriate Time zone. This conversion is necessary as TimeZone and DateTime are two separate Classes.
Module Module1
Sub Main()
Dim time As TimeZone = TimeZone.CurrentTimeZone
Console.WriteLine(time.StandardName)
Console.WriteLine(time.DaylightName)
Console.WriteLine(time.ToLocalTime(DateTime.Now))
Console.WriteLine(time.ToUniversalTime(DateTime.Now))
End Sub
End Module
Pakistan Standard Time
Pakistan Daylight Time
21/05/2020 8:38:23 PM
21/05/2020 3:38:23 PM
Shown above is the output I receive when I run this function. The output will change depending on the time zone you are in.
There is more to this class than shown above, this was just a brief overlook. Follow this link to learn more about the different Time Zones in VB.NET.
Parsing Strings with Date and Time
The Parse function allows us to convert strings into Datetime objects. The best part about this function is how flexible it is. As you’ll see in the examples below, this function can accept Strings in all kinds of different String formats.
Module Module1
Sub Main()
' Slash format
Dim time As DateTime = DateTime.Parse("2/1/2007")
Console.WriteLine(time)
' Comma format
time = DateTime.Parse("2,7,2002")
Console.WriteLine(time)
' HTTP headers
time = DateTime.Parse("Tue, 26 Feb 2019 06:31:21 GMT")
Console.WriteLine(time)
' From Windows Operating System
time = DateTime.Parse("4:40:19 PM")
Console.WriteLine(time)
time = DateTime.Parse("2/8/2020 2:35 PM")
Console.WriteLine(time)
' From ISO Standard 8601 for Dates
time = DateTime.Parse("2001-04-14")
Console.WriteLine(time)
' From other reputable sites
time = DateTime.Parse("2006/02/23 18:31:38")
Console.WriteLine(time)
time = DateTime.Parse("Tuesday, January 11, 2011")
Console.WriteLine(time)
time = DateTime.Parse("April 4, 2001")
Console.WriteLine(time)
Console.Read()
End Sub
End Module
02/01/2007 12:00:00 AM
02/07/2002 12:00:00 AM
26/02/2019 11:31:21 AM
21/05/2020 4:40:19 PM
02/08/2020 2:35:00 PM
14/04/2001 12:00:00 AM
23/02/2006 6:31:38 PM
11/01/2011 12:00:00 AM
04/04/2001 12:00:00 AM
The Datetime library returns a “Datetime” object, which includes both the Date and the Time. If the Time was not specified, it is given the default value of 12:00:00 AM
. If the Date is not specified, by default the current date is returned. In this case, I ran this code on May 21st 2020
and the 4th Output reflects this.
Creating a DateTime object
All of the above functions create and return DateTime objects, but what if we wish to create one of our choosing? Since DateTime is a class, we can create an object by passing the right input arguments to it.
One of the benefits of having a DateTime object instead of a String or something is the ability to compare DateTime objects to each other. You can’t compare two Strings with dates to find which one is the smaller one. In the example below, we’ll use several comparison operators on different dates.
The DateTime Class takes three arguments, Year, Month and Day in this order.
Module Module1
Sub Main()
Dim date1 As DateTime = New DateTime(2020, 5, 21)
Dim date2 As DateTime = New DateTime(2020, 5, 21)
Dim date3 As DateTime = New DateTime(2019, 3, 15)
Dim date4 As DateTime = New DateTime(2021, 4, 4)
If date1 = date2 Then
Console.WriteLine("Equal dates")
End If
If date3 < date2 Then
Console.WriteLine("Date3 is older than Date2")
End If
If date4 > date2 Then
Console.WriteLine("Date4 is newer than Date2")
End If
End Sub
End Module
Bonus Material: VB.NET has many different Classes that deal with Dates and Time. You’ve already dealt with two such classes, DateTime and TimeZone. If you’re interested in learning more, you should look up the Date and Timer Classes.
This marks the end of the VB.NET Datetime article. Any suggestions or contributions for CodersLegacy are more than welcome. Questions can be asked in the comments section below.