You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DateTime解析FormatException:咨询Ticks格式的解析方案

问题解答

核心结论

DateTime.ParseExact 仅支持解析符合特定日期格式的字符串,而Ticks(计时周期)本质是64位整数,无法通过格式字符串直接解析。你需要通过数值转换+专用API的方式处理这种格式。

具体实现方案

  1. 先将Ticks字符串转换为long类型
  2. 使用DateTime.FromTicks()方法将其转换为DateTime对象

修改后的代码示例

items = (await itemService.GetItems())
       .GroupBy(x => x.ItemKey)
       .Select(x => 
       {
           var dateValue = x.FirstOrDefault(y => y.item == "Date")?.Value;
           DateTime? parsedDate = null;
           
           if (!string.IsNullOrEmpty(dateValue))
           {
               // 优先尝试解析Ticks格式
               if (long.TryParse(dateValue, out long ticks))
               {
                   parsedDate = DateTime.FromTicks(ticks);
               }
               // 再尝试原有两种日期格式
               else
               {
                   try
                   {
                       parsedDate = DateTime.ParseExact(dateValue, 
                           new string[] {
                               "yyyy-MM-dd HH:mm:ss.FFFFFFF",
                               "dd.MM.yyyy HH:mm:ss"
                           }, null, DateTimeStyles.AssumeLocal);
                   }
                   catch (FormatException)
                   {
                       // 解析失败时保持null即可
                   }
               }
           }
           
           return new DisplayItem
           {
               item = x.item,            
               country = x.FirstOrDefault(y => y.item == "Country")?.Value,             
               date = parsedDate
           };
       })
       .Where(s => s.country != null)
       .OrderByDescending(s => s.date)
       .ToList();       

补充提示

  • .NET中DateTime.FromTicks()的基准时间是0001年1月1日00:00:00,要确保你收到的Ticks值基于这个基准,否则会得到错误日期。
  • 使用long.TryParse()替代直接转换,能避免转换失败抛出异常,提升代码健壮性。

内容的提问来源于stack exchange,提问作者Tar270

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 11:22:50