VB.Net - 日期和时间



您编写的多数软件都需要实现某种形式的日期函数,以返回当前日期和时间。日期在日常生活中如此常见,以至于在不加思考的情况下就能轻松地使用它们。VB.Net 还提供了强大的日期运算工具,使日期操作变得容易。

Date 数据类型包含日期值、时间值或日期和时间值。Date 的默认值为 0:00:00(午夜),即公元 1 年 1 月 1 日。等效的 .NET 数据类型为 System.DateTime

DateTime 结构表示时间中的一个瞬间,通常表示为日期和时间。

'Declaration
<SerializableAttribute> _
Public Structure DateTime _
   Implements IComparable, IFormattable, IConvertible, ISerializable,  
   IComparable(Of DateTime), IEquatable(Of DateTime)

您还可以从 DateAndTime 类获取当前日期和时间。

DateAndTime 模块包含日期和时间操作中使用的过程和属性。

'Declaration
<StandardModuleAttribute> _
Public NotInheritable Class DateAndTime

注意

DateTime 结构和 DateAndTime 模块都包含像 NowToday 这样的属性,因此初学者常常感到困惑。DateAndTime 类属于 Microsoft.VisualBasic 命名空间,而 DateTime 结构属于 System 命名空间。
因此,使用后者将有助于您将代码移植到其他 .Net 语言(如 C#)。但是,DateAndTime 类/模块包含 Visual Basic 中所有可用的旧版日期函数。

DateTime 结构的属性和方法

下表列出了 DateTime 结构中一些常用的 属性

序号 属性 描述
1 Date 获取此实例的日期部分。
2 Day 获取此实例代表的月份中的某一天。
3 DayOfWeek 获取此实例代表的星期几。
4 DayOfYear 获取此实例代表的年中的某一天。
5 Hour 获取此实例代表的日期的小时部分。
6 Kind 获取一个值,该值指示此实例表示的时间是基于本地时间、协调世界时 (UTC) 还是两者都不是。
7 Millisecond 获取此实例代表的日期的毫秒部分。
8 Minute 获取此实例代表的日期的分钟部分。
9 Month 获取此实例代表的日期的月份部分。
10 Now 获取一个 DateTime 对象,该对象设置为这台计算机上的当前日期和时间,表示为本地时间。
11 Second 获取此实例代表的日期的秒部分。
12 Ticks 获取表示此实例的日期和时间的刻度数。
13 TimeOfDay 获取此实例的一天中的时间。
14 Today 获取当前日期。
15 UtcNow 获取一个 DateTime 对象,该对象设置为这台计算机上的当前日期和时间,表示为协调世界时 (UTC)。
16 Year 获取此实例代表的日期的年份部分。

下表列出了 DateTime 结构中一些常用的 方法

序号 方法名称和描述
1

Public Function Add (value As TimeSpan) As DateTime

返回一个新的 DateTime,该 DateTime 将指定 TimeSpan 的值添加到此实例的值。

2

Public Function AddDays ( value As Double) As DateTime

返回一个新的 DateTime,该 DateTime 将指定的天数添加到此实例的值。

3

Public Function AddHours (value As Double) As DateTime

返回一个新的 DateTime,该 DateTime 将指定的小时数添加到此实例的值。

4

Public Function AddMinutes (value As Double) As DateTime

返回一个新的 DateTime,该 DateTime 将指定的分钟数添加到此实例的值。

5

Public Function AddMonths (months As Integer) As DateTime

返回一个新的 DateTime,该 DateTime 将指定的月份数添加到此实例的值。

6

Public Function AddSeconds (value As Double) As DateTime

返回一个新的 DateTime,该 DateTime 将指定的秒数添加到此实例的值。

7

Public Function AddYears (value As Integer ) As DateTime

返回一个新的 DateTime,该 DateTime 将指定的年份数添加到此实例的值。

8

Public Shared Function Compare (t1 As DateTime,t2 As DateTime) As Integer

比较两个 DateTime 实例,并返回一个整数,该整数指示第一个实例是否早于、等于或晚于第二个实例。

9

Public Function CompareTo (value As DateTime) As Integer

将此实例的值与指定的 DateTime 值进行比较,并返回一个整数,该整数指示此实例是否早于、等于或晚于指定的 DateTime 值。

10

Public Function Equals (value As DateTime) As Boolean

返回一个值,该值指示此实例的值是否等于指定的 DateTime 实例的值。

11

Public Shared Function Equals (t1 As DateTime, t2 As DateTime) As Boolean

返回一个值,该值指示两个 DateTime 实例是否具有相同的日期和时间值。

12

Public Overrides Function ToString As String

将当前 DateTime 对象的值转换为其等效的字符串表示形式。

以上方法列表并不详尽,请访问 Microsoft 文档 以获取 DateTime 结构的完整方法和属性列表。

创建 DateTime 对象

您可以通过以下方式之一创建 DateTime 对象:

  • 从任何重载的 DateTime 构造函数调用 DateTime 构造函数。

  • 为 DateTime 对象分配属性或方法返回的日期和时间值。

  • 分析日期和时间值的字符串表示形式。

  • 调用 DateTime 结构的隐式默认构造函数。

以下示例演示了这一点:

Module Module1
   Sub Main()
      'DateTime constructor: parameters year, month, day, hour, min, sec
      Dim date1 As New Date(2012, 12, 16, 12, 0, 0)
      'initializes a new DateTime value
      Dim date2 As Date = #12/16/2012 12:00:52 AM#
      'using properties
      Dim date3 As Date = Date.Now
      Dim date4 As Date = Date.UtcNow
      Dim date5 As Date = Date.Today
      
      Console.WriteLine(date1)
      Console.WriteLine(date2)
      Console.WriteLine(date3)
      Console.WriteLine(date4)
      Console.WriteLine(date5)
      Console.ReadKey()
   End Sub
End Module

编译并执行上述代码后,将产生以下结果:

12/16/2012 12:00:00 PM
12/16/2012 12:00:52 PM
12/12/2012 10:22:50 PM
12/12/2012 12:00:00 PM

获取当前日期和时间

以下程序演示如何在 VB.Net 中获取当前日期和时间:

当前时间:

Module dateNtime
   Sub Main()
      Console.Write("Current Time: ")
      Console.WriteLine(Now.ToLongTimeString)
      Console.ReadKey()
   End Sub
End Module

编译并执行上述代码后,将产生以下结果:

Current Time: 11 :05 :32 AM

当前日期:

Module dateNtime
   Sub Main()
      Console.WriteLine("Current Date: ")
      Dim dt As Date = Today
      Console.WriteLine("Today is: {0}", dt)
      Console.ReadKey()
   End Sub
End Module

编译并执行上述代码后,将产生以下结果:

Today is: 12/11/2012 12:00:00 AM

日期格式化

日期文本应括在井号 (# #) 中,并使用 M/d/yyyy 格式指定,例如 #12/16/2012#。否则,您的代码可能会根据运行应用程序的区域设置而改变。

例如,您为 2012 年 2 月 6 日指定了日期文本 #2/6/2012#。对于使用 mm/dd/yyyy 格式的区域设置来说,这是正确的。但是,在使用 dd/mm/yyyy 格式的区域设置中,您的文本将编译为 2012 年 6 月 2 日。如果区域设置使用其他格式,例如 yyyy/mm/dd,则该文本将无效并导致编译器错误。

要将日期文本转换为您的区域设置的格式或自定义格式,请使用 String 类的 Format 函数,指定预定义或用户定义的日期格式。

以下示例演示了这一点。

Module dateNtime
   Sub Main()
      Console.WriteLine("India Wins Freedom: ")
      Dim independenceDay As New Date(1947, 8, 15, 0, 0, 0)
      ' Use format specifiers to control the date display.
      Console.WriteLine(" Format 'd:' " & independenceDay.ToString("d"))
      Console.WriteLine(" Format 'D:' " & independenceDay.ToString("D"))
      Console.WriteLine(" Format 't:' " & independenceDay.ToString("t"))
      Console.WriteLine(" Format 'T:' " & independenceDay.ToString("T"))
      Console.WriteLine(" Format 'f:' " & independenceDay.ToString("f"))
      Console.WriteLine(" Format 'F:' " & independenceDay.ToString("F"))
      Console.WriteLine(" Format 'g:' " & independenceDay.ToString("g"))
      Console.WriteLine(" Format 'G:' " & independenceDay.ToString("G"))
      Console.WriteLine(" Format 'M:' " & independenceDay.ToString("M"))
      Console.WriteLine(" Format 'R:' " & independenceDay.ToString("R"))
      Console.WriteLine(" Format 'y:' " & independenceDay.ToString("y"))
      Console.ReadKey()
   End Sub
End Module

编译并执行上述代码后,将产生以下结果:

India Wins Freedom:
Format 'd:' 8/15/1947
Format 'D:' Friday, August 15, 1947
Format 't:' 12:00 AM
Format 'T:' 12:00:00 AM
Format 'f:' Friday, August 15, 1947 12:00 AM
Format 'F:' Friday, August 15, 1947 12:00:00 AM
Format 'g:' 8/15/1947 12:00 AM
Format 'G:' 8/15/1947 12:00:00 AM
Format 'M:' 8/15/1947 August 15
Format 'R:' Fri, 15 August 1947 00:00:00 GMT
Format 'y:' August, 1947

预定义的日期/时间格式

下表标识了预定义的日期和时间格式名称。这些名称可用作 Format 函数的 style 参数:

格式 描述
常规日期或 G 显示日期和/或时间。例如,1/12/2012 07:07:30 AM。
长日期、中日期或 D 根据您当前文化的长日期格式显示日期。例如,星期日,2012 年 12 月 16 日。
短日期或 d 使用您当前文化的短日期格式显示日期。例如,12/12/2012。
长时间、中时间或 T 使用您当前文化的长时间格式显示时间;通常包括小时、分钟、秒。例如,上午 01:07:30。
短时间或 t 使用您当前文化的短时间格式显示时间。例如,上午 11:07。
f 根据您当前文化的格式显示长日期和短时间。例如,星期日,2012 年 12 月 16 日 上午 12:15。
F 根据您当前文化的格式显示长日期和长时间。例如,星期日,2012 年 12 月 16 日 上午 12:15:31。
g 根据您当前文化的格式显示短日期和短时间。例如,12/16/2012 上午 12:15。
M, m 显示日期的月份和日期。例如,12 月 16 日。
R, r 根据 RFC1123Pattern 属性格式化日期。
s 将日期和时间格式化为可排序索引。例如,2012-12-16T12:07:31。
u 将日期和时间格式化为 GMT 可排序索引。例如,2012-12-16 12:15:31Z。
U 使用长日期和长时间作为 GMT 格式化日期和时间。例如,星期日,2012 年 12 月 16 日 下午 6:07:31。
Y, y 将日期格式化为年份和月份。例如,2012 年 12 月。

有关其他格式(如用户定义的格式),请参阅 Microsoft 文档

DateAndTime 类的属性和方法

下表列出了 DateAndTime 类中一些常用的 属性

序号 属性和描述
1

Date

返回或设置一个字符串值,表示根据您的系统当前日期。

2

Now

返回一个 Date 值,包含根据您的系统当前日期和时间。

3

TimeOfDay

返回或设置一个 Date 值,包含根据您的系统当前时间。

4

计时器

返回一个 Double 值,表示自午夜以来经过的秒数。

5

时间字符串

返回或设置一个字符串值,表示根据您的系统当前时间。

6

Today

获取当前日期。

下表列出了一些常用的DateAndTime类的方法

序号 方法名称和描述
1

Public Shared Function DateAdd (Interval As DateInterval, Number As Double, DateValue As DateTime) As DateTime

返回一个 Date 值,其中包含已添加指定时间间隔的日期和时间值。

2

Public Shared Function DateAdd (Interval As String, Number As Double, DateValue As Object) As DateTime

返回一个 Date 值,其中包含已添加指定时间间隔的日期和时间值。

3

Public Shared Function DateDiff (Interval As DateInterval, Date1 As DateTime, Date2 As DateTime, DayOfWeek As FirstDayOfWeek, WeekOfYear As FirstWeekOfYear) As Long

返回一个 Long 值,指定两个 Date 值之间的时间间隔数。

4

Public Shared Function DatePart (Interval As DateInterval, DateValue As DateTime, FirstDayOfWeekValue As FirstDayOfWeek, FirstWeekOfYearValue As FirstWeekOfYear) As Integer

返回一个 Integer 值,包含给定 Date 值的指定组件。

5

Public Shared Function Day (DateValue As DateTime) As Integer

返回一个 Integer 值(1 到 31),表示月份中的某一天。

6

Public Shared Function Hour (TimeValue As DateTime) As Integer

返回一个 Integer 值(0 到 23),表示一天中的小时。

7

Public Shared Function Minute (TimeValue As DateTime) As Integer

返回一个 Integer 值(0 到 59),表示小时中的分钟。

8

Public Shared Function Month (DateValue As DateTime) As Integer

返回一个 Integer 值(1 到 12),表示一年中的月份。

9

Public Shared Function MonthName (Month As Integer, Abbreviate As Boolean) As String

返回一个包含指定月份名称的字符串值。

10

Public Shared Function Second (TimeValue As DateTime) As Integer

返回一个 Integer 值(0 到 59),表示分钟中的秒数。

11

Public Overridable Function ToString As String

返回表示当前对象的字符串。

12

Public Shared Function Weekday (DateValue As DateTime, DayOfWeek As FirstDayOfWeek) As Integer

返回一个 Integer 值,包含表示一周中某一天的数字。

13

Public Shared Function WeekdayName (Weekday As Integer, Abbreviate As Boolean, FirstDayOfWeekValue As FirstDayOfWeek) As String

返回一个包含指定工作日名称的字符串值。

14

Public Shared Function Year (DateValue As DateTime) As Integer

返回一个 Integer 值(1 到 9999),表示年份。

以上列表并非详尽无遗。有关 DateAndTime 类的属性和方法的完整列表,请参阅Microsoft 文档

下面的程序演示了其中一些属性和方法:

Module Module1
   Sub Main()
      Dim birthday As Date
      Dim bday As Integer
      Dim month As Integer
      Dim monthname As String
      ' Assign a date using standard short format.
      birthday = #7/27/1998#
      bday = Microsoft.VisualBasic.DateAndTime.Day(birthday)
      month = Microsoft.VisualBasic.DateAndTime.Month(birthday)
      monthname = Microsoft.VisualBasic.DateAndTime.MonthName(month)
      
      Console.WriteLine(birthday)
      Console.WriteLine(bday)
      Console.WriteLine(month)
      Console.WriteLine(monthname)
      Console.ReadKey()
   End Sub
End Module

编译并执行上述代码后,将产生以下结果:

7/27/1998 12:00:00 AM
27
7
July
广告