【问题标题】:How do I find the age of a vehicle in months c# [duplicate]如何以月为单位找到车辆的年龄c# [重复]
【发布时间】:2011-08-16 13:10:34
【问题描述】:

可能的重复:
How to get difference between two dates in Year/Month/Week/Day?
Difference in months between two dates (C#, .NET)

嗨 我是 c# 的新手,当我输入注册日期时,我需要以月为单位找出车辆的年龄。我想知道是否有人能指出我正确的方向。 谢谢

【问题讨论】:

  • 它是模棱两可的,一个月的天数是不固定的。您还必须告诉我们在闰年的 2 月 29 日购买车辆时会发生什么。
  • 同上,如果车辆是在 2 月 29 日购买的,则在 3 月 1 日将被视为 1 个月车龄。我只需要计算自首次注册以来已经过去的月份。如果输入了日期,比如 1 月 1 日,那么 1 月将被计为 1 个月。

标签: c#


【解决方案1】:

您可以查看(DateTime.Now - registrationDate).TotalDays / 31(或30,取决于您如何定义月份)

【讨论】:

  • OP 需要几个月,而不是几天。
  • TimeSpan 没有 Months 属性。
  • 我想你在这里真的很困惑 SLaks。 Months/31 不会做任何有意义的事情。甚至连 Henk 所说的天数都没有(天数是 Months*31)。
  • 是的,我确实在这里感到很困惑。我知道没有Months 属性,但是我在编写代码时搞混了。对此感到抱歉。
【解决方案2】:
【解决方案3】:

一种非常粗略的方法是,简单地从当前时间中减去注册日期,然后从天数中得到总月数:

TimeSpan age = DateTime.Now - registrationDate;
int months = (int) (age.TotalDays/30);

几年后(大约六到七年),您将获得额外的月数。以月为单位计算并不容易,因为一个月并不是一个确切的数量。我猜六年的车可能很常见,所以这可能不太合适。

更好的选择是直接减去年份和月份:

int fullYears = (now.Year - registrationDate.Year) * 12;
int partialYear = now.Month - registrationDate.Month;
int months = fullYears + partialYear;

【讨论】:

    【解决方案4】:

    知道日子很容易,但是要讨论的月份是多少。

    以下代码使用平均 30.4 (365/12) 天/月。

    TimeSpan age = DateTime.ToDay - RegistrationDate;
    
    double months1 = age.TotalDays / 30.4;
    
    int months = (int) months1;
    

    但是有些业务系统会有自己的规则,可能从2011-04-30到2011-05-01算1个月。你需要一个好的定义。

    【讨论】:

    • 嗯,这只会累积 120 年后闰年的错误。这可能与 OP 无关,所以 +1。
    猜你喜欢
    • 2016-01-25
    • 2012-11-12
    • 2020-09-25
    • 2015-05-21
    • 1970-01-01
    • 2017-04-24
    • 1970-01-01
    • 1970-01-01
    • 2018-08-04
    相关资源
    最近更新 更多