Vb.net .NET日期常量(带全球化)

Vb.net .NET日期常量(带全球化),vb.net,datetime,Vb.net,Datetime,有人知道一种方法来声明与国际日期兼容的日期常量吗 我试过: ' not international compatible public const ADate as Date = #12/31/04# ' breaking change if you have an optional parameter that defaults to this value ' because it isnt constant. public shared readonly ADate As New Date

有人知道一种方法来声明与国际日期兼容的日期常量吗

我试过:

' not international compatible
public const ADate as Date = #12/31/04#

' breaking change if you have an optional parameter that defaults to this value
' because it isnt constant.
public shared readonly ADate As New Date(12, 31, 04)

好的,我不确定你想在这里做什么:

  • 您正在发布的代码是而不是.NET,您正在尝试移植吗
  • 日期时间不能声明为常量
  • DateTime是一种数据类型,因此一旦初始化,它们的初始化格式就不相关了
  • 如果您需要一个常量值,那么只需创建一个始终返回相同DateTime的方法
例如:

public static DateTime SadDayForAll()
{
    return new DateTime(2001, 09, 11);
}
更新 你他妈的从哪弄来的

  • C#和VB.NET之间有不同之处,这突出了其中的一个
  • 日期不是-日期时间
  • 看起来您可以在VB.NET中创建DateTime常量,但有一些限制
  • 该方法用于尝试并帮助您,因为您无法从变量(即可选参数)创建常量。这根本没有道理

根据Microsoft文档

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

您是说这是不正确的,并且解析受当前区域设置的影响吗


编辑:您尝试过4位数年份吗?

好的,我更了解您的来历

那么:

  • 创建一个返回日期常量的静态方法。这克服了国际问题,因为它作为特定的日期时间值返回
  • 现在我还记得VB6中的可选参数,但您能不能不重载该方法?如果您使用的重载方法没有日期,那么只需从静态中提取它

编辑:如果您不确定我的意思,并且想要一个代码示例,只需对这篇文章进行评论,我就会把一篇扔到上面。

一旦您在VB中将数据转换为日期对象,您就不必担心全球化问题,除非您与它进行比较或尝试导出它

这很好:

Dim FirstDate as Date = Date.UtcNow() 'or this: = NewDate (2008,09,10)'
Dim SecondDate as Date

SecondDate = FirstDate.AddDays(1)
这将拉入全球化规则并以当前线程的区域性格式打印:

HeaderLabel.Text = SecondDate.ToString()
这很糟糕:

Dim BadDate as Date = CDate("2/20/2000")
实际上——如果在这种情况下强制CDate使用正确的区域性(不变量区域性),那么这也没关系:

如果要将所有内容强制到特定的区域性,则需要将执行线程区域性和UI区域性设置为所需的区域性(en-US、不变量等)


确保您没有使用日期作为字符串进行任何操作——确保它们是实际的日期对象

如果查看语句生成的IL

public const ADate as Date = #12/31/04#
您将看到:

.field public static initonly valuetype [mscorlib]System.DateTime ADate
.custom instance void [mscorlib]System.Runtime.CompilerServices.DateTimeConstantAttribute::.ctor(int64) = ( 01 00 00 C0 2F CE E2 BC C6 08 00 00 )

请注意,正在使用接受int64记号计数的构造函数初始化。由于此勾号计数是在complile时间确定的,因此在运行时初始化此值时,似乎不太可能有任何本地化。我的猜测是,该错误与代码中的其他日期处理有关,而不是const初始化。

VB(2005)编译器中很可能存在解析错误。但是,我无法在2008年版中重现这一点。谢谢Jason,你说得完全正确。我向有此问题的开发人员进行了检查,确定其中有一个CDate(“12/31/2049”)作为更新。我与遇到问题的开发人员进行了交谈,深入研究后,他的代码中有一个CDate(“12/31/2049”),这实际上是罪魁祸首。感谢您的投入和帮助。
.field public static initonly valuetype [mscorlib]System.DateTime ADate
.custom instance void [mscorlib]System.Runtime.CompilerServices.DateTimeConstantAttribute::.ctor(int64) = ( 01 00 00 C0 2F CE E2 BC C6 08 00 00 )