我需要在我的程序中解析日期,但是在一个用户的机器上(在丹麦)它失败了。这对我的同事来说都是有用的,就我所知,他们都有相同的设置。
代码如下:
DateTime result;
if (DateTime.TryParse(InputBox.Text, out result))
YyyymmddField.Text = result.ToString("yyyyMMdd");
else
YyyymmddField.Text = "(invalid)";
CurrentCulture
为da-DK
,其配置格式为:yyyy.MM.dd
。我要解析的日期字符串是2015.07.14
。
无论当前的文化如何,这都适用于我们的机器(瑞典)。它也适用于他的同事,但不适合他。
我们在全球拥有数百名用户,据我们所知,他是唯一失败的计算机。
当前CultureInfo
以外的其他内容是否会影响TryParse
的运作方式?
答案 0 :(得分:7)
这适用于我们的机器(瑞典),无论当前情况如何 培养强>
没有。没有这样的事情。如果您使用DateTime.TryParse
而没有IFormatProvider
,则会使用当前计算机的CurrentCulture
设置。
使用当前的格式信息解析字符串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是个好主意。