如何获得最近的约会
本文关键字:约会 最近 何获得 | 更新日期: 2023-09-27 18:04:44
我在List
中有日期列表。用户输入的日期将与日期列表进行比较。
如果列表包含该特定日期,则目标日期将是该日期。如果列表中不包含该特定日期,则应将最接近的日期作为目标日期。
为此,我尝试使用Min
在LINQ:
var nearestDiff = getAlldates.Min(date => Math.Abs((date - targetDate).Ticks));
var nearest = getAlldates.Where(date => Math.Abs((date - targetDate).Ticks) == nearestDiff).First();
但是我的getAlldates
是一个列表和targetDate
是字符串。所以我在这里遇到了问题。
如何解决这个问题?
您可以简单地首先使用DateTime.Parse
:
string
解析为DateTime
。var nearestDiff = getAlldates
.Select(x => DateTime.Parse(x)) // this one
.Min(date => Math.Abs((date - targetDate).Ticks));
或改进版本,感谢Gusdor和Jeppe Stig Nielsen的输入:
getAlldates.Min(x => (DateTime.Parse(x) - targetDate).Duration());
如果日期格式不是当前区域性的日期格式,则可能需要指定要使用解析的日期格式或区域性。(例如,您可能想使用DateTime.ParseExact
)
您没有指定,但我猜日期列表是系统列表。DateTime对象。如果你的targetDate对象是一个字符串,你不能从System.DateTime中减去它。你所显示的那部分代码无法编译:
List<System.Datetime> allDates = ...;
string targetDate = ...;
var nearestDiff = getAlldates.Min(date => Math.Abs((date - targetDate).Ticks));
要编译它,你应该将targetDate转换为System.DateTime。如果您确定targetDate中的文本表示System。那么你可以使用System.DateTime.Parse(string)来获取它,否则使用TryParse。
代码如下:
List<System.Datetime> allDates = ...;
string targetDateTxt = ...;
System.DateTime targetDate = System.DateTime.Parse(targetDateText)
System.DateTime nearestDiff = getAlldates.Min(date => Math.Abs((date - targetDate).Ticks));
剩下的代码从这里开始工作
这是一个静态方法,它将返回最近的日期。
/// <summary>
/// Get the nearest date from a range of dates.
/// </summary>
/// <param name="dateTime">The target date.</param>
/// <param name="dateTimes">The range of dates to find the nearest date from.</param>
/// <returns>The nearest date to the given target date.</returns>
static DateTime GetNearestDate(DateTime dateTime, params DateTime[] dateTimes)
{
return dateTime.Add(dateTimes.Min(d => (d - dateTime).Duration()));
}