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

如何将Umbraco Lucene的updateDate值转换为.NET DateTime对象?

解决方法

这个数值638502404046200000是.NET DateTime.Ticks 值(以100纳秒为单位,从0001年1月1日开始计算)。你得到0001年1月1日的原因大概率是字符串转long失败(比如字段值为空、格式错误),导致代码返回了DateTime.MinValue。

正确转换步骤

  • 从LuceneSearchResult中获取updateDate字段的字符串值
  • 安全将字符串转换为long类型,避免转换失败的情况
  • 用转换后的long值初始化DateTime对象
  • 根据需求格式化展示,比如转为本地时间、指定显示格式

示例代码

// 从搜索结果中提取updateDate字段值
var updateDateStr = searchResult.Fields["updateDate"];

// 安全转换为long类型
if (long.TryParse(updateDateStr, out long ticks))
{
    // Umbraco通常存储UTC时间,需指定DateTimeKind避免时区偏移错误
    var updateDate = new DateTime(ticks, DateTimeKind.Utc);
    // 转为本地时间(根据业务需求选择是否需要)
    var localUpdateDate = updateDate.ToLocalTime();
    // 格式化输出,比如"yyyy-MM-dd HH:mm:ss"
    var displayDate = localUpdateDate.ToString("yyyy-MM-dd HH:mm:ss");
}
else
{
    // 处理转换失败的场景,比如显示默认文本
    var displayDate = "未知时间";
}

关键注意事项

  • 时区处理:Umbraco在Examine中存储的时间一般是UTC,转换时指定DateTimeKind.Utc可以避免本地时区偏移导致的时间错误。
  • 异常防护:必须使用long.TryParse而非直接long.Parse,防止字段值异常时触发崩溃,进而返回DateTime.MinValue(即0001年1月1日)。

之前转换失败的原因

如果你的代码是直接将字符串转为DateTime(比如DateTime.Parse(updateDateStr)),或者转换long时未做异常处理,一旦转换失败就会返回DateTime.MinValue,也就是你看到的0001年1月1日。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 05:37:33