【问题标题】:Why computer thinks that I entered date in MM/dd/yyyy format instead of dd/MM/yyyy为什么计算机认为我以 MM/dd/yyyy 格式输入日期而不是 dd/MM/yyyy
【发布时间】:2023-03-17 12:51:01
【问题描述】:

我创建了一个简单的控制台应用程序,它的 Main 方法中包含以下代码行:

DateTime dt = DateTime.Parse("01/03/2014 00:01:05");
string d = dt.ToString("dd.MM.yyyy");
Console.WriteLine(d);

我没有提供任何错误处理或 TryParse 方法来保持这个问题的简单性。

正如您在上面的代码中看到的,我想将字符串转换为 DateTime 格式。然后我更改日期的格式,然后打印输出。

上述程序的输出将是03.01.2014

现在如果我将上面代码中的日期更改为 25/02/2014,那么我会得到一个异常Input String was not in a correct format。。 p>

我只是故意在 dd/MM/yyyy 中输入日期。所以,现在我的问题是:我应该如何告诉计算机我愿意在 dd/MM/yyyy 中输入日期而不是在 MM/dd/yyyy 中?

【问题讨论】:

  • 您的计算机在哪个区域运行?
  • 它在印度运行。 UTC+5:30
  • 显然是解析问题;有些地方先写月份,有些地方先写日期。提供全球化设置以表明您想要的文化:msdn.microsoft.com/en-us/library/kc8s65zs(v=vs.110).aspx
  • 维基百科 suggests 印度语言环境应该推断出dd-MM-yyyy的日期格式;您确定您没有设置为美国语言环境吗?
  • @RowlandShaw 是的,我确定。

标签: c# date datetime


【解决方案1】:

如果您不提供不同的文化,则使用当前文化。显然,您当前的文化日期格式首先是月份,然后是日期。

您可以将DateTime.ParseExactCultureInfo.InvariantCulture 一起使用:

DateTime dt = DateTime.ParseExact("01/03/2014 00:01:05", "dd/MM/yyyy HH:mm:ss", CultureInfo.InvariantCulture);

现在dt.ToString("dd.MM.yyyy") 产生 01.03.2014。

【讨论】:

  • 抱歉,我的电脑运行的是 Windows,我总是看到 dd/MM/yyyy 格式的时间。所以,如果它的 CurrentCulture 那么我也不应该遇到任何问题。以及我的时区是 UTC+5:30。
  • @Vishal 在您的项目中,如果您调试 System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat 在运行时的值是多少?
  • @TimSchmelter 我接受你的论点。这是一个全新的项目,我刚刚创建用于测试 DateTimeProblems。现在的问题是,如果我按照你所说的那样使用 ParseExact 方法,我会得到输出。以及如果我使用 CultureInfo.CurrentCulture 那么我也会得到相同的结果。但我不知道为什么我没有使用 Parse Method 得到它。还是谢谢。
  • @Vishal:对不起,我不知道为什么DateTime.Parse 不适合你。如果您当前文化的日期格式使用dd-MM-yyyy/ 将被实际的日期分隔符替换),则应该如此。所以也许其他一些代码改变了当前线程的文化。但如果没有代码或上下文,就不可能找到原因。
  • @TimSchmelter 是的,这是可能的。感谢您的帮助。
【解决方案2】:

这可能是因为您的系统日期本地化必须设置为 MM/dd/yyyy 格式。解析日期时可以尝试使用CultureInfo.InvariantCulture

试试这样:

DateTime dt = DateTime.ParseExact("01/03/2014 00:01:05", "dd/MM/yyyy HH:mm:ss", CultureInfo.InvariantCulture);

同时检查DateTime.Parse

编辑:

在此处检查日期时间设置:

【讨论】:

  • 奇怪的是,您(两次被否决的)答案与一次被投赞成票的答案相同,人们有时会奇怪地投票!
  • 好的。您提供了一个质量很差的答案,只是为了确保您是第一个,然后您一点一点地添加了相关部分,而一个好的答案已经发布了。我对那些试图玩弄系统而不是专注于质量的人感到特别恼火。这就是为什么你收到我的反对票。
  • @JeroenVannevel:- 明白了,我以后会记住这一点。谢谢:)
猜你喜欢
  • 1970-01-01
  • 2016-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多