日期格式问题

时间:2009-09-17 08:24:26

标签: asp.net vb.net

我无法将日期值更改为我想要的格式。这是我的代码。当我执行此代码时,我看到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)

1 个答案:

答案 0 :(得分:11)

你不会错过任何东西。 myDateDate,它在内部将日期存储为数字形式(更准确地说为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")

请注意格式字符串中/字符周围的单引号;它们是必需的,因为系统默认将/解释为当前文化的日期分隔符的占位符。如果你想强制格式化的日期使用/字符而不是当前文化的普通分隔符(瑞典的' - ',土耳其的'。',你需要像我的例子那样转义它。