【发布时间】:2013-05-30 23:06:44
【问题描述】:
我需要比较我的 DotNetNuke 模块中的两个 DateTime 值,如下所示:
// 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 因为time1 的DateTime 值大于now 的DateTime 值。但是当我在 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 在保存到数据库之前来自我的网站服务器,并与现在变量中客户网站的日期时间值进行比较。所有代码都是我在该客户端站点中的应用程序。这些代码首先访问 time1 日期.net 获取远程站点数据的方法。所以当 dnn 站点语言设置为 de-DE 时,“现在”变量值是第一天,这与我的站点日期相反,日期是美国格式月份第一。因此,当进行比较时,我的服务器日期早于客户站点日期!一切都中断了。仅供参考,我的服务器日期是 i 周后的日期,即 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 站点语言是德语还是英语,都是正确的。
【问题讨论】:
-
您找到的解决方案是正确的Link 如果您进行了转换,则文化信息是必要的。我认为是一个好方法,但我不知道这是否是好的做法。
标签: c# asp.net .net datetime dotnetnuke