我需要比较DateTime
DotNetNuke 模块中的两个值,如下所示:
// This value actually comes from the database.
DateTime time1 = Convert.ToDateTime("6/2/2013 5:21:05 PM");
// Say it is now "5/31/2013 2:20:33 AM"
DateTime now = DateTime.Now;
int num = DateTime.Compare(time1, now);
如您所见,num == 1
因为 的DateTime
值time1
大于 的DateTime
值now
。但是当我在 DotNetNuke 设置中将语言更改为德语 ( de-DE
) 时,值now
变为 - 31/5/2013 2:20:33 AM
。结果就是num
变成-1
,意思time1
是早于now
。这是不正确的,因为time1
实际上晚于now
.
该time1
值始终采用mm/dd/yyyy
格式,因为它来自服务器。
那么,如果在 DotNetNuke 中设置了另一种语言,我该如何进行正确的比较?当我在网上搜索时,我发现我可以使用以下代码更正时间:
provider = new CultureInfo("en-US");
DateTime.ParseExact("5/31/2013", "d", provider);
那是对的吗?有没有更好的方法来处理这个问题?
已编辑
忘了说时间 1 在保存到数据库之前来自我的网站服务器,并与现在变量中客户网站的日期时间值进行比较。所有代码都是我在该客户端站点中的应用程序。这些代码首先通过 .net 方法访问 time1 日期获取远程站点数据。因此,当该 dnn 站点语言设置为 de-DE 时,请查看“现在”变量值是第一天,这与我的站点日期相反,首先是美国格式月份。因此,当进行比较时,我的服务器日期结果早于客户现场日期!一切都中断了。仅供参考,我的服务器日期是一周后的日期,即 6 月 2 日,用于许可目的。
再次编辑:
嗨every1。我通过以下代码找到了解决方案。正如我上面所说,这个日期来自我的另一台服务器 - “6/15/2013”(更改它是bef4 6/2/2013)。它是字符串格式,为什么它是一个字符串?这是一个悠久的历史。现在让它成为一个字符串。在转换为字符串之前它是美国日期格式(前一个月)。现在在我的应用程序所在的当前网站中,这些代码似乎工作。希望我没有错,拜托确认
CultureInfo provider = CultureInfo.InvariantCulture;
provider = new CultureInfo("en-US");
DateTime time1 = DateTime.ParseExact("6/15/2013", "d", provider);
DateTime now = DateTime.Now;
int num = DateTime.Compare(time1, now);
“num”返回 1,无论 dnn 站点语言是德语还是英语,这都是正确的。