在C#中给出两个日期时间,如何显示年和月的差异?
我可以在简单减法的时间跨度上做基本的算术,但这不会考虑月份,闰年等不同的长度。
感谢您的帮助。
答案 0 :(得分:2)
因为基础表示是从公元1月1日午夜12点开始以100纳秒的时间间隔测量的,所以减法将非常正确地处理闰年等:
DateTime date1 = ...
DateTime date2 = ...
// date2 must be after date1
TimeSpan difference = date2.Subtract(date1);
DateTime age=new DateTime(tsAge.Ticks);
int years = age.Years - 1;
int months = age.Month - 1;
Console.WriteLine("{0}Y, {1}M", years, months);
答案 1 :(得分:1)
FWIW这就是我最终的目标
DateTime servicelength = new DateTime(DateTime.Now.Subtract(employee.StartDate).Ticks);
LengthOfService.Text = String.Format("{0}Y {1}M", servicelength.Year - 1, servicelength.Month - 1);
答案 2 :(得分:0)
你可以试试这个:
DateTime date1 = new DateTime(1954, 7, 30);
DateTime today = DateTime.Now;
TimeSpan span = today - date1;
DateTime age = DateTime.MinValue + span;
int years = age.Year - 1;
int months = age.Month - 1;
int days = age.Day - 1;
Console.WriteLine("years: {0}, months: {1}, days: {2}", years, months, days);
答案 3 :(得分:0)
月份长短不一?应该在哪个月?时间跨度不限于一年中的某一年或一个月。您只能计算两个日期之间的天数:
Timspan span = date2 - date1;
Console.Writeline("Days between date1 and date2: {0}", span.Days);
从DateTime.MinValue计算只需将0001作为开始,并计算从1月开始的月份。我不认为这是实用的。
修改强>
有另一个想法。您可以计算date1之后的月份:
// primitive, inelegant, but should work if date1 < date2
int years = date2.Year - date1.Year;
int month = date2.Month - date1.Month;
if (month < 0)
{
years -= 1;
month += 12;
}
Console.Writeline("{0}Y {1}M", years, month);
这里的问题是你只是忽略了这些日子。毕竟这不是一个好的解决方案。
答案 4 :(得分:0)
在此示例中,由于它是UTC DateTime (您还可以为“现在”定义任何其他日期)
DateTime now = DateTime.UtcNow;
DateTime birthdate = new DateTime (1976,11,12);
DateTime age = now.AddYears(-birthdate.Year).AddMonths(-birthdate.Month).AddDays(-birthdate.Day);
如果在生日中定义,则可以继续输入小时,分钟,秒等。
现在您可以提取年龄中的年月日
int years = age.Year
int month = age.Month
以此类推