有谁知道如何声明与国际日期兼容的日期常量?

我试过了:

' 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)
有帮助吗?

解决方案

如果你看一下语句生成的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 刻度计数的构造函数进行初始化。由于该滴答计数是在编译时确定的,因此当该值在运行时初始化时,任何本地化似乎都不太可能发挥作用。我的猜测是,错误在于代码中的其他一些日期处理,而不是 const 初始化。

其他提示

根据微软文档,

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

您是说这是不正确的并且解析受到当前语言环境的影响?

编辑: 您是否尝试过使用 4 位数年份?

一旦您将数据存入 VB 中的 Date 对象中,您就不必担心全球化,直到您将某些内容与它进行比较或尝试导出它。

这可以:

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 使用正确的区域性(InvariantCulture),那么即使这样也是可以的:

Dim OkButBadPracticeDate as Date = CDate("2/20/2000", CultureInfo.InvariantCulture)

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

确保您没有将日期作为字符串进行任何操作 - 确保它们是实际的 Date 对象!

好吧,我更了解你来自哪里..

怎么样:

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

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

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

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

例如:

public static DateTime SadDayForAll()
{
    return new DateTime(2001, 09, 11);
}

更新

你到底从哪里得到这些?

  • 那里 C# 和 VB.NET 之间的差异,本文重点介绍了其中之一。
  • 日期 不是一个 .NET 数据类型 - 约会时间 是。
  • 看起来您可以在 VB.NET 中创建 DateTime 常量,但有一些限制
  • 该方法是为了尝试帮助您,因为您无法从 a 创建 const 多变的 (IE。可选参数)。这甚至没有意义。
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top