问题背景:
在 Visual Basic 中,日期和时间的处理一直是一个独立的编程方面——从 VB6 中的旧类型 Variant/Date 到 VB.NET 中的结构 Date/DateTime。DateTime 类的出现使得操作日期更加灵活,能够获取系统值,计算间隔,并正确格式化日期。
问题:
字符串转 DateTime 的转换错误(尤其是在不同的区域设置下)是常见的,时区处理不当、用户显示格式不正确或发送到服务器格式不正确等问题也经常出现。
解决方案:
DateTime 是一个结构,允许存储日期和时间,执行算术操作、比较以及转换为所需格式。解析字符串日期使用 Parse、TryParse,格式化使用 ToString 方法及(可选)CultureInfo。
示例代码:
Dim today As DateTime = DateTime.Now Dim birth As DateTime = New DateTime(1990, 1, 1) Dim formatted As String = today.ToString("yyyy-MM-dd HH:mm") Dim parsed As DateTime If DateTime.TryParse("15/06/2024", parsed) Then Console.WriteLine(parsed.ToString()) End If
关键特点:
1. DateTime.MinValue 等于多少?
DateTime.MinValue 是日期 01.01.0001 00:00:00(而不是例如 01.01.1970,像在 UNIX 中那样)。在检查“值是否已设置”时要小心使用。
2. DateTime 能否存储“无时间的整个一天”?
不可以,DateTime 类型始终包含时间值。如需仅存储日期,请将时间设为“00:00:00”,并在输出时仅使用日期格式。
3. 如何正确比较日期,而忽略时间?
要仅比较日期部分,请去掉时间:
Dim aDate As DateTime = DateTime.Now.Date Dim bDate As DateTime = someOtherDate.Date If aDate = bDate Then ...
客户端应用通过 TextBox 接受用户的出生日期,并直接通过 DateTime.Parse(textBox.Text) 进行解析。欧洲和美国用户以不同格式输入日期。结果——错误的出生日期或异常。
优点:
缺点:
日期输入通过 DateTimePicker 完成,或使用 TryParseExact(textBox.Text, "dd.MM.yyyy", CultureInfo.InvariantCulture, ...)。代码中考虑了回退机制和准确的验证。
优点:
缺点: