字符串在c#中未被识别为有效的DateTime?

cod*_*ill 1 c#

我在c#中使用linq编写了这个代码用于日期范围过滤器.但是在服务器上得到这样的错误.我的本地代码工作得非常好,但在服务器上部署得到错误.

在这里我试试这段代码:

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();
Run Code Online (Sandbox Code Playgroud)

我不知道我的错误在这个查询中的任何人都知道然后请让我知道如何解决这个问题.本地代码工作得很好,但服务器收到错误.

Jon*_*eet 5

您使用的方法取决于当前线程的当前文化 - 以及系统时区.

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);
Run Code Online (Sandbox Code Playgroud)

指定不变文化意味着您不会意外地最终解析日期,就好像它是在非公历中指定的那样.

请注意,这是一种不寻常的格式 - 如果您可以使用ISO-8601格式,那将是更好的IMO.

我还建议,如果你正在做大量的日期/时间工作,你会考虑我的Noda Time项目,这使得生活更简单,不用担心日期的时区,因为它只是一个约会.你将这些字符串解析为LocalDate值.