【问题标题】:Writing out how many years and months are in a date range (i.e. 2 years and 3 months) [duplicate]写出日期范围内有多少年和月(即2年3个月)[重复]
【发布时间】:2016-08-13 05:02:41
【问题描述】:

在 2016 年 2 月 1 日 - 2019 年 1 月 31 日的情况下:
我想输出:'3 years',因为日期范围是 3 年。

在 2016 年 2 月 1 日至 2019 年 3 月 31 日的情况下:
我想输出:'3 年零 2 个月',因为日期范围是 3 年零 2 个月。

我不需要担心几天,所以如果这是常态,我可以四舍五入。

是否有任何 c# 助手可以帮助我解决此类问题?

【问题讨论】:

  • 这样做的问题是一年和一个月没有设置时间单位。
  • @juharr 虽然这是真的,但我认为天真的“月 / 12 + 余数”足以在 UI 中显示(这似乎是目标)
  • @Rob,但是你几个月来过得怎么样?与天/ 30?我并不是说不可能得到它,只是大多数解决方案都会有边缘情况,这些情况并不总是像你认为的那样工作。
  • @juharr 是的,你是对的 - 我突然想到没有 TimeSpan.TotalMonths - 在这种情况下,我同意,提供强大的解决方案确实很困难

标签: c# datetime datetime-format


【解决方案1】:

要近似计算年和月,您可以执行以下操作:

DateTime dayStart;
DateTime dateEnd;

TimeSpan ts = dateEnt - dateStart
int years = ts.Days / 365;
int months = (ts.Days % 365) / 31;

对于精确的计算,考虑到闰年、月中不同的天数等可能会很棘手。

【讨论】:

    【解决方案2】:

    您可以使用它并不真正关心闰年:

    DateTime first = new DateTime(2016, 2, 1);
    DateTime second = new DateTime(2019, 3, 31);
    double totalMonths = (second - first).TotalDays / (365.25 / 12);
    int years = (int)totalMonths / 12;
    int months = (int)Math.Round(totalMonths - (years * 12), 0);
    

    【讨论】:

    • 那么您是说如果日期范围包括闰年,那么结果会不准确吗?如果闰年我不能用 366 替换 365.25 吗?
    • 不要担心闰年,因为它很少会真正影响我试图创建的描述?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-24
    • 1970-01-01
    • 1970-01-01
    • 2021-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多