1

当我运行时:
Date.Parse(Now.ToString("M/yy/d"), New Globalization.DateTimeFormatInfo() With {.ShortDatePattern = "M/yy/d"})

我收到错误消息:

Could not determine the order of year, month, and date from 'M/yy/d'.

这种(奇怪的)格式是否被禁止?它是一个错误吗?

注意
我不知道为什么需要这种格式。

编辑
建议Date.ParseExact(Now.ToString("M/yy/d"), "M/yy/d",New Globalization.DateTimeFormatInfo() ) 给出:

String was not recognized as a valid DateTime.

Edit2
我正在使用 NET Framework 4.0(Windows)。

4

2 回答 2

1

问题是由两个组成部分造成的:

  1. 您当前的文化使用与不变的文化默认值 ( ) 不同的日期分隔符/
  2. when/用作格式字符串的一部分,DateTime.Parse或者DateTime.ParseExact不被翻译为文字正斜杠,而是作为来自指定格式提供程序的日期分隔符,无论是什么(如果你希望它按字面意思理解,你必须使用“转义序列” %/)。

所以有很多方法可以正确地做到这一点:

Date.ParseExact(Now.ToString("M/yy/d"), "M%/yy%/d", Nothing) 

这只是告诉ParseExact从字面上解释斜杠。

Date.ParseExact(Now.ToString("M/yy/d"), "M/yy/d",
              New Globalization.DateTimeFormatInfo() With {.DateSeparator = "/"})

这告诉ParseExact使用文字斜杠作为日期分隔符,更改其当前文化的默认行为。

顺便说一句:我使用ParseExact而不是Parse因为当您知道输入具有特定格式时它更适合;Parse尝试使用启发式方法自行确定格式,这在这种情况下是不合适的。

于 2012-04-20T15:12:49.307 回答
1

老问题,但代码已过时。接受的答案详细说明了为什么会发生这种情况+1。

DateTime.ParseExact("11/11/1997", "MM/dd/yyyy", null, System.Globalization.DateTimeStyles.None);
于 2019-03-05T12:31:58.730 回答