推荐
关注
功能
  • 分享到微博
  • 分享到微信
  • 分享到豆瓣
  • 分享到 QQ
  • 分享到 QZone
  • 收藏到博客园
  • 联系博主
TOP
Message

计算精确月份差 GetTotalMonthDiff

< 返回CSharp 扩展方法库

说明

在 CSharp 中,通过将两个 DateTime 相减获得 TimeSpan,并由此获得相隔的天数、时、分、秒都十分方便,但唯独缺少获得相隔月份的方法。直接对 TimeSpan 进行计算,利用相隔天数计算月份差(每月份的天数均不同,且有闰年存在)会存在一些误差。本扩展可解决这个问题。

已知两个时间(DateTime)dt1 和 dt2,计算两者之间的精确月份差。

如果想获得整型的月份差,请使用 int GetMonthDiff(this DateTime dt1, DateTime dt2) 方法。

扩展方法代码

复制代码
/// <summary> /// Compute dateTime difference precisely /// Alex-LEWIS, 2015-08-11 /// </summary> /// <param name="dt1"></param> /// <param name="dt2"></param> /// <returns></returns> public static double GetTotalMonthDiff(this DateTime dt1, DateTime dt2) { var l = dt1 < dt2 ? dt1 : dt2; var r = dt1 >= dt2 ? dt1 : dt2; var lDfM = DateTime.DaysInMonth(l.Year, l.Month); var rDfM = DateTime.DaysInMonth(r.Year, r.Month); var dayFixOne = l.Day == r.Day ? 0d : l.Day > r.Day ? r.Day * 1d / rDfM - l.Day * 1d / lDfM : (r.Day - l.Day) * 1d / rDfM; return dayFixOne + (l.Month == r.Month ? 0 : r.Month - l.Month) + (l.Year == r.Year ? 0 : (r.Year - l.Year) * 12); }

使用示范

复制代码
DateTime dt1 = new DateTime(2015, 08, 11); DateTime dt2 = new DateTime(1992, 10, 10); var monthTotalDiff = dt1.GetMonthDiff(dt2);

< 返回CSharp 扩展方法库

posted @   某个人。  阅读(262)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示