比较不同的日期格式



我正在按日期进行搜索。即使下面的日期是相同的,它们也不会返回true,因为Json中的时间与datetimepicker返回的时间不同。

我只想比较日期,而不是时间。下面应该为真:

用户选择的日期->2022 - 11 - 26 - t00:00:00我从Json中得到的日期->26.11.2022 12:42:09

如何比较这个并返回true。谢谢你。

private DateTime dateSelectedByUser = DateTime.Today;
public async Task DateOnChange(ChangeEventArgs args)
{
var value = args.Value.ToString();
dateSelectedByUser = value == string.Empty ? DateTime.Today : DateTime.Parse(value);
result = items.Where(item=> item.date == dateSelectedByUser ).ToArray();
}

谢谢。

如何比较此值并返回true

如何处理约会时间是一个非常令人讨厌的面试问题。这会让大多数程序员措手不及。

让我们看看你的代码。

您的输入类型设置为date,即日期没有时间,但您的数据类型设置为DateTime。尽管您没有得到错误或警告,但实际上您已经越过了类型错误的边界。如果您现在存储date1date2,date1 == date2将始终返回false。除非您将它们存储在精确的同一时间点(这在同一台机器上是不可能的),否则它们将是不同的。

有一些现代c#(和数据库)编码规则需要遵循:

  1. 如果您只对日期感兴趣,请使用DateOnly类型。
  2. 否则使用DateTimeOffset

虽然我肯定会得到那些不同意的人的评论,但所有其他timeate的东西都是为了保持与旧的c#的向后兼容性,旧的c#在日期时间上过于简单!

下面是一个基于您提供的代码的简单Demo页面。没有迹象表明json日期适合,所以这是DateFromSomewhereElse
@page "/"
<PageTitle>Index</PageTitle>
<h1>Hello, world!</h1>
<input class="form-control mb-3" type="date" @bind-value=this.MyDate />
<div class="@this.AlertCss"> Dates Are the Same: @this.DatesAreSame </div >
@code {
private DateOnly MyDate = DateOnly.FromDateTime(DateTime.Now);
private DateTime DateFromSomewhereElse = DateTime.Now;
private bool DatesAreSame => MyDate == DateOnly.FromDateTime(DateFromSomewhereElse);
private string AlertCss => this.DatesAreSame
? "alert alert-success"
: "alert alert-danger";
}

对于c# 10之前的版本:

为DateTime和DateTimeOffset创建扩展方法以获取午夜值:

public static class DateTimeExtensions
{
public static DateTime AsDateOnly(this DateTime value) 
=> new DateTime(value.Year, value.Month, value.Day);
public static DateTime AsDateOnly(this DateTimeOffset value)
=> new DateTime(value.Year, value.Month, value.Day);
}

然后测试页:

@page "/"
<PageTitle>Index</PageTitle>
<h1>Hello, world!</h1>
<input class="form-control mb-3" type="date" @bind-value=this.MyDate />
<div class="@this.AlertCss"> Dates Are the Same: @this.DatesAreSame </div >
@code {
private DateTimeOffset MyDate = DateTimeOffset.Now;
private DateTimeOffset DateFromSomewhereElse = DateTimeOffset.Now;
private bool DatesAreSame => MyDate.AsDateOnly() == DateFromSomewhereElse.AsDateOnly();
private string AlertCss => this.DatesAreSame
? "alert alert-success"
: "alert alert-danger";
}

相关内容

  • 没有找到相关文章

最新更新