2

我设置日期变量

Dim myDate as Date
myDate = #5/15/2013#

无论系统区域设置如何,这是否始终在运行时有效?

4

2 回答 2

4

根据MSDN 文档

您必须将日期文字括在数字符号 (# #) 内。您必须以 M/d/yyyy 格式指定日期值,例如 #5/31/1993#。此要求与您的区域设置和计算机的日期和时间格式设置无关。

这个限制的原因是你的代码的含义永远不应该根据你的应用程序运行的语言环境而改变。假设您对 #3/4/1998# 的 Date 文字进行硬编码,并打算将其表示为 1998 年 3 月 4 日。在使用 mm/dd/yyyy 的语言环境中,3/4/1998 将按照您的意图进行编译。但是假设您在许多国家/地区部署您的应用程序。在使用 dd/mm/yyyy 的语言环境中,您的硬编码文字将编译到 1998 年 4 月 3 日。在使用 yyyy/mm/dd 的语言环境中,文字将无效(1998 年 4 月,0003)并导致编译器错误。

因此,您的问题的答案是肯定的,它将始终在运行时工作,不,您不需要为计算机的区域设置更改此设置。

请记住,日期文字有些不受欢迎。它们在 VB.Net 中作为 VB6 的向后熟悉的东西得到支持。它们甚至不存在于 C# 等其他 .Net 语言中。如果您必须对特定日期进行硬编码,最好使用DateTime单独的参数,例如:

Dim myDate as DateTime
myDate = new DateTime(2013,5,15)

另请注意,这Date只是 VB.Net 的别名System.DateTime,再次用于从 VB6 向后熟悉。使用哪个并不重要,它们的含义相同。

于 2013-07-28T23:41:38.943 回答
1

不,这在加拿大等标准为 dd/MM/yyyy 的国家/地区不起作用。全球化应用程序的最佳方法是使用 DateTime.ParseExact 和/或 DateTime.TryParseExact

        Dim tempdate As DateTime

        tempdate = DateTime.ParseExact("05/20/2013", "MM/dd/yyyy", Globalization.CultureInfo.InvariantCulture)
于 2013-07-28T23:07:51.233 回答