DateTime
This VB.NET Structure
represents a point in time. It stores times, like 12 AM, and dates like yesterday. With TimeSpan
we capture time differences.
Methods are used to compute relative times such as yesterday and tomorrow. DateTime
can be formatted—this changes it to a String
.
A DateTime
instance can be created with the New operator. There are many overloads. But the overload shown here accepts 3 arguments.
DateTime
instance we just created.ArgumentOutOfRangeException
.Module Module1 Sub Main() ' Part 1: create new instance. Dim value As DateTime = New DateTime(2022, 2, 1) Console.WriteLine(value) ' Part 2: test the year. If value.Year = 2022 Then Console.WriteLine("Year is 2022") End If End Sub End Module2/1/2022 12:00:00 AM Year is 2022
To get yesterday, we can access the Today property and then add negative one days to it. This is equivalent to subtracting one day from the DateTime
instance.
Module Module1 Sub Main() ' Write the today value. Console.WriteLine("Today: {0}", DateTime.Today) ' Subtract one day. Dim yesterday As DateTime = DateTime.Today.AddDays(-1) ' Write the yesterday value. Console.WriteLine("Yesterday: {0}", yesterday) End Sub End ModuleToday: 1/17/2010 12:00:00 AM Yesterday: 1/16/2010 12:00:00 AM
This is a good day to schedule less pleasurable tasks. To compute tomorrow, we add one day with AddDays()
on the value returned by the Today property.
Module Module1 Sub Main() ' Write Today. Console.WriteLine("Today: {0}", DateTime.Today) ' Add one to Today to get tomorrow. Dim tomorrow As DateTime = DateTime.Today.AddDays(1) ' Write. Console.WriteLine("Tomorrow: {0}", tomorrow) End Sub End ModuleToday: 1/17/2010 12:00:00 AM Tomorrow: 1/18/2010 12:00:00 AM
Getting the first day in a year is useful. We defines two new methods to get the first day in a year. When no argument is specified, the current year (for Today) is used.
Module Module1 Sub Main() ' Write first day of current year. Console.WriteLine("First day: {0}", FirstDayOfYear) ' Write first day of 1999. Dim y As New DateTime(1999, 6, 1) Console.WriteLine("First day of 1999: {0}", FirstDayOfYear(y)) End Sub ''' <summary> ''' Get first day of the current year. ''' </summary> Private Function FirstDayOfYear() As DateTime Return FirstDayOfYear(DateTime.Today) End Function ''' <summary> ''' Get first day of the specified year. ''' </summary> Private Function FirstDayOfYear(ByVal y As DateTime) As DateTime Return New DateTime(y.Year, 1, 1) End Function End ModuleFirst day: 1/1/2010 12:00:00 AM First day of 1999: 1/1/1999 12:00:00 AM
Here we compute the last day in a year. This may help with year-based record keeping. The method gets the first day of the next year, and then subtracts one day.
IsLeapYear
Function, which can tell us whether an additional day is in the year or not.Module Module1 Sub Main() ' Write current last day. Console.WriteLine("Last day: {0}", LastDayOfYear) ' Write last day of 1999. Dim d As New DateTime(1999, 6, 1) Console.WriteLine("Last day of 1999: {0}", LastDayOfYear(d)) End Sub ''' <summary> ''' Get last day of the current year. ''' </summary> Private Function LastDayOfYear() As DateTime Return LastDayOfYear(DateTime.Today) End Function ''' <summary> ''' Get last day of the specified year. ''' </summary> Private Function LastDayOfYear(ByVal d As DateTime) As DateTime Dim time As New DateTime((d.Year + 1), 1, 1) Return time.AddDays(-1) End Function End ModuleLast day: 12/31/2010 12:00:00 AM Last day of 1999: 12/31/1999 12:00:00 AM
DaysInMonth
Months contain different numbers of days. With the shared DaysInMonth
Function, we get day-counts for a month in a specific year. The 2 means February.
Module Module1 Sub Main() ' There are 28 days in February. Dim count As Integer = DateTime.DaysInMonth(2014, 2) Console.WriteLine(count) ' Count days in March of 2014. Dim count2 As Integer = DateTime.DaysInMonth(2014, 3) Console.WriteLine(count2) End Sub End Module28 31
DayOfWeek
Every day in the future of our universe will have a day of week—like Monday or Tuesday. If you have a special day you need to test for, use the DayOfWeek
property.
DayOfWeek
Enum
value. We can test it against a DayOfWeek
enumerated constant.Module Module1 Sub Main() ' Get current day of the week. Dim day As DayOfWeek = DateTime.Today.DayOfWeek ' Write the current day. Console.WriteLine("TODAY IS {0}", day) End Sub End ModuleTODAY IS Wednesday
DateString
This property, only offered in VB.NET, returns the current date in String
representation. Usually, DateTime
-based methods are preferable—they are more standard.
DateString
simply accesses the Today property on DateTime
, and then it calls ToString
with a format string
.Module Module1 Sub Main() Console.WriteLine(DateString) End Sub End Module05-18-2011
Date
This is another VB.NET special type. It aliases the DateTime
type and has all the same methods. We can use Date
interchangeably with DateTime
.
DateTime
is preferred in .NET programs as it is standard—all C# programs use DateTime
not Date
.Module Module1 Sub Main() ' The Date type is the same as the DateTime type. Dim d As Date = New Date(2014, 10, 6) Dim d2 As DateTime = New DateTime(2014, 10, 6) If d = d2 Then Console.WriteLine("Equal dates") End If End Sub End ModuleEqual dates
DateTime.MinValue
Suppose we have a DateTime
that we are not ready to assign to an actual value. We can use a special constant like MinValue
to mean the default, zero value.
DateTime
to mean "no value is set." A nullable may be clearer for this use in programs.Module Module1 Sub Main() Dim value As DateTime = DateTime.MinValue Console.WriteLine("MINVALUE: {0}", value) ' Test for MinValue. If value = DateTime.MinValue Then Console.WriteLine("MIN VALUE IS SET") End If End Sub End ModuleMINVALUE: 1/1/0001 12:00:00 AM MIN VALUE IS SET
We cannot create a DateTime
that cannot possibly exist. Here we try to use a month of 20 in the constructor, but get an "un-representable" error.
Module Module1 Sub Main() ' Cannot have a month of 20, no such month exists. Dim value As DateTime = New DateTime(2000, 20, 1) End Sub End ModuleUnhandled Exception: System.ArgumentOutOfRangeException: Year, Month, and Day parameters describe an un-representable DateTime. at System.DateTime.DateToTicks(Int32 year, Int32 month, Int32 day) at System.DateTime..ctor(Int32 year, Int32 month, Int32 day)...
We cannot assign a DateTime
to Nothing—we must use a special value like MinValue
to mean "no date." But we can also use a Nullable DateTime
.
DateTime
. We can set a nullable DateTime
to Nothing.DateTime
to nothing. And the IsNothing
function recognizes our value is nothing.Module Module1 Sub Main() ' Use nullable DateTime. Dim test As DateTime? = New DateTime(2000, 1, 1) Console.WriteLine("GETVALUEORDEFAULT: {0}", test.GetValueOrDefault()) ' The nullable DateTime can be Nothing. test = Nothing Console.WriteLine("ISNOTHING: {0}", IsNothing(test)) End Sub End ModuleGETVALUEORDEFAULT: 1/1/2000 12:00:00 AM ISNOTHING: True
We used the DateTime
type in the VB.NET language in some specific, useful ways. The examples provide a glimpse into the DateTime
type but not a comprehensive view.