【问题标题】:I have string to datetime conversion error我有字符串到日期时间的转换错误
【发布时间】:2016-12-24 16:59:11
【问题描述】:

我有这段代码,它会根据日期(月份)产生一些统计数据

var customersList = customerDatesBLL.GetAll()
  .Where(cust => cust.CaseDate != null)
  .GroupBy(c => DateTime.ParseExact(c.CaseDate,"dd/MM/yyyy",null).Month)
  .Select(c => new { 
    SumOfCustomer = c.Count(), 
    mount = int.Parse(c.Select(x => (DateTime.ParseExact(x.CaseDate,
"dd/MM/yyyy", null)).Month.ToString()).FirstOrDefault()) 
  })
  .ToList();

该代码总是产生FormatException

字符串未被识别为有效的日期时间。

原始数据:dates from database in dd/mm/yyyy format

【问题讨论】:

  • 向我们展示您的原始数据

标签: c# linq datetime


【解决方案1】:

问题在于解析CaseDate,这可能是由几件事引起的:

1- CaseDates 不是正确的字符串格式,它们可能类似于“2/10/2016” 这会导致错误解析为“dd/MM/yyyy”

2- 文化可能是罪魁祸首,因为日期中的分隔符取决于它们。你可以试试

DateTime.ParseExact(c.CaseDate,"dd/MM/yyyy",CultureInfo.InvariantCulture)

如果没有尝试解析突出循环中的日期,请检查这些是否对您有所帮助,以便在导致问题的确切 CaseDate 处生成运行时错误并将其发布在此处。

【讨论】:

  • CaseDate 就像“2/10/2016”是的
  • 这就是我使用DateTime.ParseExact而不是DateTime.Parse 的原因
  • @moaatazaamer:这正是你不应该使用ParseExact的原因。在您当前的模式中,您需要一个前导零:“02/10/2016”。仔细阅读答案,它可能会帮助你。
  • @sefe 我已经在上面添加了一段原始数据,请检查一下,但问题还是一样
  • @moaatazaamer:答案分为两部分。你应该检查一下,这是你的问题......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-02
  • 2012-07-21
  • 2012-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多