C#计算工龄/年龄
C#计算工龄
- 如果超过一年,算1年
- 不足一年的,按照已过天数/总天数 计算百分比,保留2位小数点,(舍去算法)
C# 全选
/// <summary>
/// 计算工龄
/// </summary>
/// <param name="time1"></param>
/// <param name="time2"></param>
/// <returns></returns>
public static double CalcYear(DateTime time1, DateTime time2)
{
var year = time2.Year - time1.Year;
if (time2.Month < time1.Month || (time2.Month == time1.Month && time2.Day < time1.Day))
{
year = year - 1;
}
var nearYear = new DateTime(time2.Year - 1, time1.Month, time1.Day);
if (time2.Month > time1.Month || (time2.Month == time1.Month && time2.Day >= time1.Day))
{
nearYear = new DateTime(time2.Year, time1.Month, time1.Day);
}
int days = (nearYear.AddYears(1) - nearYear).Days;
var dotValue = Math.Floor((time2 - nearYear).TotalDays * 100 / days) / 100;
return year + dotValue;
}
测试:
C# 全选
List<string[]> testGroups = new List<string[]>()
{
new string[]{ "2022-02-01", "2023-01-01" },
new string[]{ "2022-02-01", "2023-02-03" },
new string[]{ "2022-02-01", "2024-01-31" },
new string[]{ "2022-02-01", "2024-02-02" },
new string[]{ "2022-02-01", "2024-02-01" }
};
foreach (var g in testGroups)
{
DateTime timeStart = DateTime.Parse(g[0]);
DateTime timeEnd = DateTime.Parse(g[1]);
var value = Tools.CalcYear(timeStart, timeEnd);
Console.WriteLine($"{timeStart.ToString("yyyy-MM-dd")} 至 {timeEnd.ToString("yyyy-MM-dd")} 计算值:{value}");
}
输出内容:
2022-02-01 至 2023-01-01 计算值:0.91
2022-02-01 至 2023-02-03 计算值:1
2022-02-01 至 2024-01-31 计算值:1.99
2022-02-01 至 2024-02-02 计算值:2
2022-02-01 至 2024-02-01 计算值:2
C#计算年龄
C# 全选
/// <summary>
/// 计算年龄
/// </summary>
/// <param name="brithday"></param>
/// <returns></returns>
public static int CalcAge(DateTime brithday)
{
var today = DateTime.Today;
var year = DateTime.Today.Year - brithday.Year;
if (today.Month < brithday.Month || (today.Month == brithday.Month && today.Day < brithday.Day))
{
year = year - 1;
}
return year;
}
版权声明:本文为YES开发框架网发布内容,转载请附上原文出处连接
post 张国生