一个用户的DateTime.TryParse失败

时间:2015-07-01 12:25:36

标签: c# datetime

我需要在我的程序中解析日期,但是在一个用户的机器上(在丹麦)它失败了。这对我的同事来说都是有用的,就我所知,他们都有相同的设置。

代码如下:

DateTime result;
if (DateTime.TryParse(InputBox.Text, out result))
    YyyymmddField.Text = result.ToString("yyyyMMdd");
else
    YyyymmddField.Text = "(invalid)";

CurrentCultureda-DK,其配置格式为:yyyy.MM.dd。我要解析的日期字符串是2015.07.14。 无论当前的文化如何,这都适用于我们的机器(瑞典)。它也适用于他的同事,但不适合他。

我们在全球拥有数百名用户,据我们所知,他是唯一失败的计算机。

当前CultureInfo以外的其他内容是否会影响TryParse的运作方式?

3 个答案:

答案 0 :(得分:7)

  

这适用于我们的机器(瑞典),无论当前情况如何   培养

没有。没有这样的事情。如果您使用DateTime.TryParse而没有IFormatProvider,则会使用当前计算机的CurrentCulture设置。

来自documentation;

  

使用当前的格式信息解析字符串s   DateTimeFormatInfo对象,由当前隐式提供   线程文化。

我使用的是.NET Framework 4.5,而AllCultures中只有7种文化没有将其作为标准日期和时间格式。如果你不能告诉我们你的其他同事CurrentCulture是什么,我会假设他会从我的角度使用其中一个。

ar
bn
ml
ar-SA
bn-IN
ml-IN
bn-BD

您可以使用InvariantCulture而不是那种混淆,因为您的字符串具有稳定的格式,例如yyyy.MM.dd,而不是希望他的CurrentCulture设置会解析它。

答案 1 :(得分:1)

使用 CultureInfo.InvariantCulture

DateTime result;
    if (DateTime.TryParse(InputBox.Text, out result))
        YyyymmddField.Text = result.ToString("yyyyMMdd",CultureInfo.InvariantCulture);
    else
        YyyymmddField.Text = "(invalid)";

答案 2 :(得分:0)

原则上,使用可重用的方法(例如扩展方法)来解析使用不变文化的DateTimes和numerics是个好主意。