如何在.NET中比较独立于当前文化的日期

时间:2010-10-15 18:12:04

标签: c#-2.0

我在.net 2.5应用中对试用版的到期日进行了硬编码。如何将其与用户的系统日期进行比较,以便无论用户的文化设置如何,比较都是准确的?

DateTime maxTrialDate = DateTime.Parse(“11/17/2020”,new System.Globalization.CultureInfo(“en-US”));

DateTime curDate = DateTime.Parse(DateTime.Now.ToShortDateString(),new System.Globalization.CultureInfo(“en-US”));

//下一行代码使用DateDiff方法比较两个日期 - 不记得它的确切语法。

在我的XP机器上,如果日期时间的控制面板区域设置是en-US,但如果我将其更改为en-AU,则上面的代码设置curDate会触发FormatException“日期不正确”字符串格式“

6 个答案:

答案 0 :(得分:4)

如果您避免使用字符串来表示日期,则不会遇到此问题:

DateTime maxTrialDate = new DateTime(2020, 11, 17);

if (DateTime.Now.Date > maxTrialDate)
{
     // expired
}

DateTime是通过明确定义日,月和年组件创建的,因此区域设置不会混淆事项。

答案 1 :(得分:0)

在整个地方使用CultureInfo.InvariantCulture怎么样?

答案 2 :(得分:0)

您可以使用System.Globalization.CultureInfo.InvariantCulture

答案 3 :(得分:0)

由于您明确要求解析器使用FormatException,因此需要en-US

尝试调用DateTime.Parse()的{​​{3}},或者,如果你真的想要使用双args重载(* cough * FxCop * cough *),请执行以下操作:

using System.Globalization;

DateTime.Parse("11/17/2020", CultureInfo.CurrentCulture);

答案 4 :(得分:0)

如果我没记错的话,在美国以外的大多数地方,标准日期格式是dd / mm / yyyy,而不是美国标准mm / dd / yyyy。可能是在尝试解析日期时,它认为17是月份,这是一个无效的月份,从而导致错误。

答案 5 :(得分:0)

为什么你使用Parse方法,如果你硬编码过期日期只是比较它 DateTime.now