【问题标题】:vb.net default date.now formatting vs c# default.Now formattingvb.net 默认 date.now 格式化 vs c# default.Now 格式化
【发布时间】:2017-11-15 00:16:31
【问题描述】:

我上一篇文章来自我

c# change date type format to ddmmyyyy

我必须在 VB.Net WinForm 应用程序中工作 我遇到了 DateDateTime 类型的问题。

我通常使用 C#,但现在我遇到了这个问题,我确定这是其他程序员遇到的常见问题。

我在控制面板中定义了我的日期时间格式,例如“dd/MM/yyyy”。您还可以按照here 中的说明签入Regedit

如果,在我的 WinForm 中,我在 C# 中定义了一个像这样的变量

日期时间 aa = 日期时间.Now

DateTime.Now 以“dd/MM/YYYY”格式检索当前日期。

但是如果我像这样向 VB.Net 提出同样的问题

Dim val As New Date
 val = Date.Now

val 具有格式为“MM/dd/yyyy”的当前日期

即使我设置了

val = Date.Now.ToString("dd/MM/yyyy")

val 保持格式为“MM/dd/yyyy”

我分配给变量 Datetime 的每个日期,它都会自动将格式“dd/MM/yyyy”转换为“MM/dd/yyyy”。

如何将 VB.Net 配置为像 C# 一样接受 Datetime 类型?我需要它从控制面板中获取它。

【问题讨论】:

  • DateTime.Now 不会以 any 格式返回日期/时间 - 它是原始日期/时间值。仅当您将原始值转换为字符串表示形式时,格式化才有意义(这是打印出来的)。
  • Date 在VB 中只是DateTime 的别名,因此Date.NowDateTime.Now 是相同的,并且您的观察必须受到您未在此处显示的内容的影响。两者都没有自己的格式。
  • 当您执行Date.Now.ToString("dd/MM/yyyy") 时,您声称 val 保持格式为“MM/dd/yyyy” 你确定吗? ToString() 返回一个字符串,而不是日期,所以没有多大意义。
  • 差异是由于 VB 支持 DateTime 类型的文字而 C# 不支持。当您在 C# 项目的 Watch 窗口等中查看 DateTime 的值时,您会看到在其上调用 ToString 的结果。这将尊重系统设置。在 VB 中,您实际上会将值视为文字,您可以通过它包含在“#”分隔符中这一事实来判断。 Date 文字总是显示为 M/dd/yyyy。它不支持系统设置,因为如果这样做,相同的代码在不同的机器上会以不同的方式工作。
  • 这不是问题。无论如何,DateTime 的值仍然完全相同。您正在尝试解决一个不存在的问题。 .NET DateTime 值存储为数字,因此系统设置没有影响。只有当您需要将日期显示为文本时,格式才重要,然后您将调用 ToString,这将在两种语言中产生完全相同的结果。

标签: c# vb.net datetime datetime-format


【解决方案1】:

这里没有实际问题,但感知到的差异是由于 VB 支持 Date 文字,而 C# 不支持。 C# 和 VB 都支持数字类型、字符串、布尔值等的文字。

var str = "Hello World";
var num = 100;
var flag = true;
Dim str = "Hello World"
Dim num = 100
Dim flag = true

不过,只有 VB 支持日期文字。例如,在 C# 中,您必须对硬编码日期执行类似操作:

var dt = new DateTime(1969, 6, 19);

你可以在 VB 中做基本相同的事情:

Dim dt As New DateTime(1969, 6, 19)

但你也可以这样做:

Dim dt = #6/19/1969#

当您在 VB 中使用日期文字时,您总是使用 M/dd/yyyy 格式。它根本无法使用系统设置,因为这意味着相同的代码在不同的机器上会有不同的行为。

现在,当您在调试器中运行项目并使用 Watch 窗口等查看变量或其他表达式的值时,如果类型支持,调试器将显示文字值。如果该类型不支持文字,您将看到在对象上调用 ToString 的结果。这意味着调试器将始终以 M/dd/yyy 格式向您显示 VB 项目中的 DateTime 值,因为它向您显示文字 Date,而在 C# 项目中显示的内容取决于您的系统设置,因为它是在 DateTime 上调用 ToString 的结果。

不过,这根本不是问题。 DateTime 变量的实际值不会改变。它们实际上根本不包含格式。它们只是系统中的数字。仅当您要将值表示为文本时,格式才是一个问题。当您需要执行此操作时,您将调用 ToString 您的值,这将遵循系统设置,无论是在 VB 还是 C# 中。

请注意,我在此答案中使用了术语 DateDateTimeDateTime 是一个 .NET 类型,而 Date 是一个内在的 VB 数据类型。两种语言都支持其固有数据类型的文字,但只有 VB 具有日期的固有数据类型,这就是为什么只有 VB 支持文字日期的原因。正如 C# 中的 int 和 VB 中的 IntegerInt32 类型的别名一样,VB 中的 DateDateTime 类型的别名,但在 C# 中没有等效项。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-27
    • 2015-01-30
    • 2011-02-06
    • 2023-04-06
    • 1970-01-01
    • 2021-03-03
    相关资源
    最近更新 更多