首页 > 解决方案 > Visual Studio 中 datetimepicker 中的默认日期

问题描述

如果用户在 DateTimePicker 中选择日期,它只会选择日期,这正是我所需要的。但是,如果用户没有选择任何日期并将 DateTimePicker 保留为今天的日期,它会显示日期 + 时间。数据存储在 Access 数据库中。当用户将 DateTimePicker 保留到今天的日期(不更改任何日期)时,我只想将日期存储在 Access 存储中。

Me.DateTimePicker1.CustomFormat = "dd-MM-yyyy"
Me.DateTimePicker1.DataBindings.Add(New System.Windows.Forms.Binding("Value", Me.OrderdetailsBindingSource, "OrderDate", True))
Me.DateTimePicker1.DataBindings.Add(New System.Windows.Forms.Binding("Text", Me.OrderdetailsBindingSource, "OrderDate", True))
Me.DateTimePicker1.Font = New System.Drawing.Font("Tahoma", 10.2!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.DateTimePicker1.Format = System.Windows.Forms.DateTimePickerFormat.Custom
Me.DateTimePicker1.Location = New System.Drawing.Point(158, 39)
Me.DateTimePicker1.Name = "DateTimePicker1"
Me.DateTimePicker1.Size = New System.Drawing.Size(294, 28)
Me.DateTimePicker1.TabIndex = 2
Me.DateTimePicker1.Value = New Date(2019, 6, 18, 0, 0, 0, 0)

标签: vb.netwinformsms-access

解决方案


Access 没有 SQL Server 等短日期格式。有关数据类型列表,请参阅此链接

使用权:

  • 日期/时间,用于日期和时间, 8 个字节

SQL 服务器:

  • datetime,从 1753 年 1 月 1 日到 9999 年 12 月 31 日,精度为 3.33 毫秒, 8 个字节
  • 日期,仅存储日期。从 0001 年 1 月 1 日到 9999 年 12 月 31 日, 3 个字节

因此 Access 只有一种必须能够存储时间的日期/时间类型,它与 SQL Server 日期时间具有相同的字节数。您看到的没有时间戳的日期实际上是上午 12 点。这就是您在 DateTimePicker 上设置日期/时间时所做的事情Me.DateTimePicker1.Value = New Date(2019, 6, 18, 0, 0, 0, 0)。顺便说一句,这是您最好的解决方案,将 DateTimePicker 设置为今天的日期(只是使用我提到的 DateTime.Date 属性的日期部分)。

要解决您的问题,请在以下位置执行此操作Form_Load

Me.DateTimePicker1.Value = Now.Date ' this makes it today at 12 AM

如果您想更好地了解发生了什么,请随时查看您的 DateTimePicker 的值,以查看其中始终存在时间,即使是上午 12 点:

MessageBox.Show($"{DateTimePicker1.Value:yyyy-MM-dd HH:mm:ss}")

并在您的数据库上运行此查询,以查看 Access 字段中也始终存在时间Date/Time,并且 Access 自动隐藏了凌晨 12 点的时间:

select 
orderdate
, format(orderdate, 'General Date') as GeneralDate
, format(orderdate, 'Short Time') as ShortTime
, format(orderdate, 'Medium Time') as MediumTime
, format(orderdate, 'Long Time') as LongTime
, format(orderdate, 'Short Date') as ShortDate
, format(orderdate, 'Medium Date') as MediumDate
, format(orderdate, 'Long Date') as LongDate
from orderdetails

推荐阅读