计算工龄(月份)的C#算法
目前自认为比较精确的算法
static int GetGongLing(string RuChangRiQi, string HeSuanYueFen)
{
int GongLing = 0;
DateTime zhouQiStart = DateTime.Parse(HeSuanYueFen);
DateTime RuChang;
if (DateTime.TryParse(RuChangRiQi, out RuChang))
{
Console.WriteLine(RuChang);
int index = 0;
var startRuChang = RuChang;
while (true)
{
index++;
if (startRuChang.AddMonths(index) < zhouQiStart)
{
continue;
}
else
{
index--;
break;
}
}
GongLing = index;
}
else
{
GongLing = 0;
}
return GongLing;
}
以下两种借位方式不合适,比如3.31到4.30算出的是0实际上应该是1个月
方式一:只计算月份
int year = dt1.Year - dt2.Year; int month = dt1.Month - dt2.Month; int day = dt1.Day - dt2.Day; if (day < 0) month -= 1; int totalMonth = year * 12 + month;
方式二:计算全部
请自己nuget 元组和xmpCore
using Sharpen;
using System;
using System.Text;
namespace Test
{
public class CompareDate
{
/// <summary>
/// 获取两个时间间隔了多少年 月 天
/// </summary>
/// <param name="startDate"></param>
/// <param name="endDate"></param>
/// <returns></returns>
public static (int year, int month, int days) CalculateDate(DateTime startDate, DateTime endDate)
{
try
{
if (endDate < startDate)
return (0, 0, 0);
Calendar startCalendar = new GregorianCalendar(startDate.Year, startDate.Month - 1, startDate.Day);
Calendar now = GregorianCalendar.GetInstance(System.Globalization.CultureInfo.CurrentCulture);
now.SetTime(endDate);
int day = now.Get(CalendarEnum.DayOfMonth) - startCalendar.Get(CalendarEnum.DayOfMonth);
//月份从0开始计算,所以需要+1
int month = (now.Get(CalendarEnum.Month) + 1) - (startCalendar.Get(CalendarEnum.Month) + 1);
int year = now.Get(CalendarEnum.Year) - startCalendar.Get(CalendarEnum.Year);
//按照减法原理,先day相减,不够向month借;然后month相减,不够向year借;最后year相减。
if (day < 0)
{
month -= 1;
now.Set(CalendarEnum.Month, -1);//得到上一个月,用来得到上个月的天数。
day += now.GetMaximum(CalendarEnum.DayOfMonth);
}
if (month < 0)
{
month = (month + 12) % 12;
year--;
}
StringBuilder tag = new StringBuilder();
if (year > 0)
tag.Append(year + "岁");
if (month > 0)
tag.Append(month + "个月");
if (day > 0)
tag.Append(day + "天");
if (year == 0 && month == 0 && day == 0)
tag.Append("今日出生");
if (year < 0) year = 0;
System.Diagnostics.Debug.WriteLine(tag.ToString());
return (year, month, day);
}
catch (Exception er)
{
//DGHR.Util.Logger.Error(er);
return (0, 0, 0);
}
}
/// <summary>
/// 获取两个日期的总天数
/// </summary>
/// <param name="startDate"></param>
/// <param name="endDate"></param>
/// <returns></returns>
public static int? CalculateTotalDays(DateTime startDate, DateTime endDate)
{
if (endDate < startDate)
return null;
return (endDate - startDate).Days;
}
}
}
本博客是个人工作中记录,更深层次的问题可以提供有偿技术支持。
另外建了几个QQ技术群:
2、全栈技术群:616945527
2、硬件嵌入式开发: 75764412
3、Go语言交流群:9924600
闲置域名WWW.EXAI.CN (超级人工智能)出售。
另外建了几个QQ技术群:
2、全栈技术群:616945527
2、硬件嵌入式开发: 75764412
3、Go语言交流群:9924600
闲置域名WWW.EXAI.CN (超级人工智能)出售。

浙公网安备 33010602011771号