c# - 在C#中无法将字符串识别为有效的DateTime?

标签 c#

我已经使用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/

相关文章:

c# - 我可以使用 C# 使 "Contains"方法不区分大小写吗?

c# - 如何检查datagridview中的Checkbox是否被选中

c# - IEnumerable 是否总是暗示一个集合?

c# - 关于 sqlDependency 更改的 SignalR 重复消息

c# - 算法分析 :Random Number

c# - 如何自动记录 .NET Core WebAPI 中的每个请求?

c# - 增加 EWS 流媒体订阅连接的生命周期元素

c# - 我可以更好地重写此 LINQ to XML 吗?

c# - 缓存故障 : dynamic css files

c# - .NET 4.5 中 List<T>.Sort 的行为从 .NET 4.0 改变了吗?