【发布时间】:2022-11-17 06:46:38
【问题描述】:
我正在按日期搜索。即使以下日期相同,它们也不会返回 true,因为来自 Json 的时间与 datetimepicker 返回的时间不同。
我只想按日期比较,而不是时间。 以下应该是正确的:
Date selected by user -> 2022-11-26T00:00:00
Date I get from Json -> 26.11.2022 12:42:09
我怎样才能比较这个并返回 true。谢谢你。
<input type="date" @onchange="DateOnChange" bind="dateSelectedByUser" placeholder="SearchByDate" />
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.dateFromJson == dateSelectedByUser ).ToArray();
StateHasChanged();
}
编辑:
我应该可以在这里更改格式吗?
List<Item> result = items.GroupBy(x => x.ItemNo)
.Select(x => new Item
{
ItemNo = x.Key,
date = x.FirstOrDefault(y => y.Key == "Date")?.Value != null
? DateTime.ParseExact(x.FirstOrDefault(y => y.Key == "Date")?.Value, "dd.MM.yyyy HH:mm:ss", CultureInfo.InvariantCulture)
: (DateTime?)null
})
.ToList();
【问题讨论】:
-
Value.ToString();<-- 这是你的问题。这将使用特定于请求而不是不变的CurrentCulture。相反,总是指定一个明确的格式。我不建议特别使用InvariantCulture,因为它使用美国日期格式而不是 ISO 8601,但制作您自己的符合 ISO 8601 的CultureInfo很简单。 -
另一种方法是完全避免
DateTime值的 JSON 字符串表示,并使用Int64整数 Unix 时间值,这是可靠且机器可移植的,即使不是人类直接可读的。 -
DateTime.Today<-- 你有充分的理由不使用 UTC 吗? -
我想你误解了我的问题......
-
DateTime 可以分为 3 种:UTC、本地和未指定 - 并且有问题!因此,请尽快尝试使用 DateTimeOffset 而不是 DateTime,方法是将其转换为 DateTime。并使用格式模式解析字符串(json 格式是否始终相同 - 看起来像欧洲格式) - 注意:dots in format pattern could be / with en-US culture (or was it vice-versa)!
标签: c# blazor webassembly