.net - 不同的日期时间格式在 EF Core 和 LINQ 中返回错误的结果集。DateTime.ParseExact 不起作用
问题描述
我有一个 ASP.NET Core MVC 应用程序,其文化设置为en-GB
使用dd/mm/yyyy
.
我在用:
- .NET 核心 2.1
- EF 核心 2.2
- SQL Server 2019 (v15)
- 日期列的类型
datetime2
但是,对于我的一个查询,我需要在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
想到两个问题:
- 这是因为我没有得到结果的日期时间格式吗?EF Core 不处理格式吗?
- 当我使用
ParseExact
不同的方法将日期解析为我想要的格式时。这没用。我总是以dd/mm/yyyy
.
我尝试过解析日期:
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 格式吗?
解决方案
大家好,查询本身是错误的。
什么问题 :
如果开始日期和结束日期相同:
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 Stoev和 Stefano Balzarotti在评论中指出的那样。
写了这个答案,因为它清楚地表明 datetime 是一种类型,并且没有Jon Skeet在评论中指出的格式。
推荐阅读
- excel - Sheets.Add 返回对象 'Sheets' 的 1004 方法 'Add' 失败
- java - Java使用接口作为数据类型
- sightly - 如何在 Sightly(HTL)的循环中迭代列表和计数器 ++
- python - OpenCV 阈值函数
- php - 在内置服务器中指定 PHP 文件时,在验证之前更改随机 $_SESSION 令牌
- r - 在 R 中对多个数据集执行相同的操作
- groovy - Jmeter - 一起使用 url 编码和 groovy 函数
- java - 如何列出所有 WiFi 接入点?
- python - 如何从列表中创建一个类
- css - 使用 CSS :hover 旋转 SVG 元素会导致元素被翻译