我在.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“日期不正确”字符串格式“
答案 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