我已经使用linq在c#中为日期范围过滤器编写了此代码,但是服务器上出现错误。在我的本地计算机上,代码运行良好,但是在服务器上部署时却出现错误。
这是我的代码:
string fromDate = "15-03-2017";
string toDate = "17-03-2017";
DateTime FromDate = Convert.ToDateTime(fromDate);
DateTime ToDate = Convert.ToDateTime(toDate);
UserList = db.Users
.Where(t => DbFunctions.TruncateTime(t.datetime) >= FromDate
&& DbFunctions.TruncateTime(t.datetime) <= ToDate)
.OrderByDescending(a => a.datetime)
.ToList();
我不知道我的错误在此查询中。如果有人知道,请让我知道如何解决此问题。在我的本地计算机上,代码运行良好,但是在服务器上却出现错误。
最佳答案
您使用的方法取决于当前线程的当前区域性-以及系统时区。
在我看来,最好使用DateTime.ParseExact
,并可能指定一个DateTimeStyles
值来强制使用UTC。简单解析:
// Names changed to follow .NET naming conventions
CultureInfo invariantCulture = CultureInfo.InvariantCulture;
DateTime fromDateTime = DateTime.ParseExact(fromDate, "dd-MM-yyyy", invariantCulture);
DateTime toDateTime = DateTime.ParseExact(toDate, "dd-MM-yyyy", invariantCulture);
指定不变的区域性意味着您不会意外地将日期解析为非格雷戈里日历中指定的日期。
请注意,这是一种不常见的格式-如果可以使用ISO-8601格式,那将是更好的IMO。
我还建议,如果您要进行大量的日期/时间工作,请考虑使用我的Noda Time项目,该项目使您不必担心日期的时区,因为它只是一个日期,因此生活变得更加简单。 ..您会将这些字符串解析为
LocalDate
值。
关于c# - 在C#中无法将字符串识别为有效的DateTime?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42804974/