【发布时间】:2014-03-05 20:16:06
【问题描述】:
我有一些日期当前存储为字符串列表。
例如:
List<string> dates = new List<string>();
dates.Add("1/10/14");
dates.Add("2/9/14");
dates.Add("1/15/14");
dates.Add("2/3/14");
dates.Add("2/15/14");
(日期为mm/dd/yy格式)
我将接受用户的输入(也采用mm/dd/yy 格式),但作为字符串。
现在,我想在数组中查找用户输入日期之后最接近的日期。
例如,如果用户输入"1/13/14",则输出应为"1/15/14"。
如果用户输入"2/5/14",则下一个最接近的日期是"2/9/14"。
但是如果用户输入的日期晚于最后一个日期(比如"3/1/14",它仍然会返回数组中的最后一个日期"2/15/14")
我知道在某些时候您必须转换为 DateTime 类型,但我无法弄清楚找到此类日期的逻辑。
【问题讨论】:
-
将字符串解析为日期与在日期列表中查找最近的日期是完全不同的问题。分开处理。首先将这些日期解析为
DateTime对象。然后,一旦你有了它,就在List<DateTime>中寻找最近的日期。 -
mm分钟,M或MM几个月.. -
为什么首先将日期存储为字符串?
-
@user3320572 然后将它们解析为
DateTime对象。在尝试解决查找最近日期的问题时,它们来自文件不应该是相关的。 -
考虑这一点:如果您想要“下一个”日期,则该日期必须大于您拥有的日期。然后,当您发现所有日期都大于您所拥有的日期时,您需要其中最小的一个。使用 LINQ 的简单实现(假设列表包含 DateTime 而不是字符串):
dates.Where(dt => dt > theOneIHave).Min()。现在,如果您有很多日期,首先抓取所有较大的日期,然后检索最小的日期,可能效果不佳。在这种情况下,我可能会对列表进行排序,然后使用二进制搜索来找到最接近(但更大)的值。
标签: c# datetime datetime-format