我的where-query中有一个小问题。我有一个包含不同日期的文本文件。我已经设法阅读所有这些,我想使用不同月份的日期。 文本文件中日期的输入格式如下所示:20130101。
我的问题:是否有任何方法可以查看索引4和5,并说月份1月索引4应为0而索引5应为1?或者我可以用另一种方式解决这个问题吗?
我目前已经解决了这个问题,但之后我的计划将在2014年无效。
if(ComboBoxMonth.Text == "January")
{
var query = from p in list
where p.Datum.StartsWith("201301")
select p;
}
答案 0 :(得分:1)
如果有疑问,我会恢复点符号,因为我可以出于某种原因更好地想象它:)
list.Select(p=>p.Datum.Length >= 6 && p.Datum.SubString(4,2) == "01");
但是,你可以通过使用:
来做同样的事情where p.Datum.Length >= 6 && p.Datum.SubString(4,2) == "01"
然而,重新阅读你的问题,也许你真正想要的只是转换为日期时间并检查日期的任何部分?
list.Select(p=>DateTime.ParseExact(p.Datum, "yyyyMMdd", null).Month == 1);
答案 1 :(得分:0)
您可以将输入转换为DateTime,并使用以下代码对其进行过滤:
if(ComboBoxMonth.Text == "January")
{
var query = from p in list
select new DateTime(p.Substring(0, 4), p.Substring(4, 2), p.Substring(6, 2)) into y
where y.Month == 1
select new { Input = p, DateValue = y }
}
答案 2 :(得分:0)
where DateTime.ParseExact(p.Datum, "yyyyMMdd", CultureInfo.InvariantCulture).Month == 1
答案 3 :(得分:-1)
如果您的问题是如何从 1月转到01,则可以使用System.Globalization.DateTimeFormatInfo.MonthNames
查找月份索引
// +1 to make it 1 based
string twoDigitMonth = (Array.IndexOf(System.Globalization.DateTimeFormatInfo.MonthNames, ComboBoxMonth.Text)) + 1).ToString("D2");
var query = from p in list
where p.Datum.Substring(4,2)==twoDigitMonth
select p;