我无法将日期值更改为我想要的格式。这是我的代码。当我执行此代码时,我看到mydate为mm / DD / yyyy格式。我错过了什么?
Dim dateString As String = Date.Now.ToString("dd.MM.yyyy")
Dim myDate As Date = Date.ParseExact(dateString, "dd.MM.yyyy", Nothing)
答案 0 :(得分:11)
你不会错过任何东西。 myDate
是Date
,它在内部将日期存储为数字形式(更准确地说为UInt64
)。它不存储日期的字符串表示形式,并且它本身没有格式。当它显示为字符串时(例如使用ToString
方法),如果没有指定日期格式,它将使用当前文化的默认格式,在您的情况下似乎是MM/dd/yyyy
<强>更新
我会尝试更清楚地说明这一点。
您所经历的实际上是一种相当常见的误解。您确实需要在 date 和日期的字符串表示之间做出改变。这是两件不同的事情。
Date
(实际上是DateTime
没有时间信息,因此我将在此处引用DateTime
)将日期和时间内部存储为数字。目前,我在哪里,这个数字是9857259848526375120
。这是当前日期和时间,如DateTime
对象中所示。
虽然这个值对代码非常有用,但对我们这些人来说没什么意义。我们通过决定在不同国家以不同方式写日期,使问题更加复杂化。所以,在瑞典,今天的日期将写为"2009-09-17"
,而在土耳其则为"17.09.2009"
。
因此,为了使我们更容易,每当DateTime
对象显示为文本时(在VS调试器中,当在屏幕上打印等)时,数值将被格式化为字符串使用一些日期格式。这种格式在不同国家会有所不同。如果在显示字符串时未指定格式,则将使用当前区域性的默认格式。例如,在VS监视窗口中就是这种情况。
如果您希望获取根据特定文化格式化的DateTime
对象的字符串表示形式,可以将其传递给ToString
方法:
myDate.ToString(CultureInfo.GetCultureInfo("tr-TR"))
另一方面,如果您需要将日期转换为其他特定格式,则可以使用格式字符串来实现:
Dim formattedDate1 As String = myDate.ToString("dd'/'MM'/'yyyy")
Dim formattedDate2 As String = myDate.ToString("dd.MM.yyyy")
请注意格式字符串中/字符周围的单引号;它们是必需的,因为系统默认将/解释为当前文化的日期分隔符的占位符。如果你想强制格式化的日期使用/字符而不是当前文化的普通分隔符(瑞典的' - ',土耳其的'。',你需要像我的例子那样转义它。