以下是我的代码
var result =
(from SV in Tbl
where (DateTimeOffset.Parse(SV.FieldName) >= DateTimeOffset.Parse(StartDate)
&& DateTimeOffset.Parse(SV.FieldName) <= DateTimeOffset.Parse(EndDate))
group SV by 1 into SVgrp
select new { Count = SVgrp.Sum(p => p.Count) }).ToList()
SV.FieldName = '19-06-2015'
,StartDate = '2015-09-20T00:00:00Z'
,EndDate = '2015-10-21T23:59:59Z'
在我的开发机器上,这段代码完美无缺,而在我的服务器上,它给了我错误String was not recognized as a valid DateTime
我的两台机器的日期格式都设置为英语(印度),位置为印度,时区设置为UTC。
我尝试在所有四种Parse方法上添加CultureInfo.InvariantCulture
,但错误没有发生。
为什么我只在服务器上收到此错误?怎么解决?
答案 0 :(得分:1)
我确定在转换s.FieldName = '19 -06-2015'的值时会出现错误。编译器假定格式为MM-dd-yyyy,因此19被视为无效的月份编号。
我的建议是构建日期值,见下文
var result = (from SV in Tbl
where (new DateTime(Convert.ToInt32(SV.FieldName.Substring(6, 4)), Convert.ToInt32(SV.FieldName.Substring(3, 2)), Convert.ToInt32(SV.FieldName.Substring(0, 2))) >= DateTimeOffset.Parse(StartDate)
&& new DateTime(Convert.ToInt32(SV.FieldName.Substring(6, 4)), Convert.ToInt32(SV.FieldName.Substring(3, 2)), Convert.ToInt32(SV.FieldName.Substring(0, 2))) <= DateTimeOffset.Parse(EndDate))
group SV by 1 into SVgrp
select new { Count = SVgrp.Sum(p => p.Count) }).ToList()
这不是最好的,但它会完成这项工作。
答案 1 :(得分:0)
尝试使用 DateTime.ParseExact(dateString,@“d / M / yyyy”,System.Globalization.CultureInfo.InvariantCulture);
或
DateTime.TryParse(dateString,out date4);
如果解析失败,则不会抛出错误,而是返回false,表示解析失败。