首页 > 解决方案 > 不同的日期时间格式在 EF Core 和 LINQ 中返回错误的结果集。DateTime.ParseExact 不起作用

问题描述

我有一个 ASP.NET Core MVC 应用程序,其文化设置为en-GB使用dd/mm/yyyy.

我在用:

但是,对于我的一个查询,我需要在yyyy-mm-dd通过 EF Core 查询时设置日期格式。

var xyx = db.zyz
            .Where(x => x.date >= startdate && x.date<= enddate)
            ......

上面的查询即使按照条件在zyz表中有一条记录,也无法返回结果集。

我认为只有当 startdate 和 enddate 相同时才会发生这种情况。

例如,假设 zyz 有日期记录2020-04-19

询问

   var dt = DateTime.ParseExact("20200419","yyyyMMdd",CultureInfo.InvariantCulture);

    var xyx = db.zyz
                .Where(x=>x.date >= dt && x.date<= dt)
                ......

这无法获取任何行。它返回 0 行。

我认为这是因为日期时间格式。

db中zyz中的日期字段格式为2020-19-04 00:00:00.0000000

想到两个问题:

我尝试过解析日期:

var dt = DateTime.ParseExact("20200415","yyyyMMdd",CultureInfo.InvariantCulture);

DateTime theTime = DateTime.ParseExact("20200415",
                                        "yyyyMMdd",
                                        CultureInfo.InvariantCulture,
                                        DateTimeStyles.None);

var dts = DateTime.ParseExact("20200415", "yyyyMMdd",new CultureInfo("en-ZA"));

上述查询总是返回格式日期19/04/2020 00:00:00

据我了解,由于 datetime 只是一种数据类型,因此查询不应该独立于 datetime 格式并返回数据而不考虑 datetime 格式吗?

标签: .netentity-framework.net-coreef-core-2.2ef-core-2.1

解决方案


大家好,查询本身是错误的。

什么问题 :

如果开始日期和结束日期相同:

var xyx = db.zyz
            .Where(x => x.date >= startdate && x.date<= enddate)
            ......

我正在发送:

2020-04-19 00:00:00 双方

我不得不发送:

2020-04-19 00:00:00- 开始日期 2020-04-19 11:59:00- 结束日期

正如Ivan StoevStefano Balzarotti在评论中指出的那样。

写了这个答案,因为它清楚地表明 datetime 是一种类型,并且没有Jon Skeet在评论中指出的格式。


推荐阅读