gpt4 book ai didi

c# - 为什么 TimeSpan 没有 Years 属性?

转载 作者:可可西里 更新时间:2023-11-01 08:35:37 25 4
gpt4 key购买 nike

我正在编写一个转换器,它可以获取一个人的出生日期并生成他们的年龄(以年为单位)。我写了一些看起来像这样的东西:

public class DateOfBirthToAgeConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var date = value as DateTime?;
if (date == null) return null;
return (DateTime.Now - date).Years;
}

public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}

我发现 TimeSpan 上没有 Years 属性,它是由两个 DateTime 对象相减得到的。对此我有些意外。我想过为什么可能没有Years。我想这可能是因为闰日,但按照这个逻辑,不应该有 Days 因为夏令时。

没有Months 是有道理的,因为没有标准的月份长度。

我能够编写一些不同的代码来获得正确的年龄,但我仍然很想知道为什么 上没有 YearsWeeks 属性时间跨度有人知道原因吗?

最佳答案

TimeSpan 只包含两个 DateTime 值之间的差异。未知此 TimeSpan 属于哪一年。这也是它没有 Months 属性的原因。

示例:

TimeSpan.FromDays(60)

那是几个月? 1 还是 2


The absence of Months made sense since there is no standard month length.

由于闰年,也没有标准的年份长度。

解决方法:如果您真的想显示一个近似值,那么执行 TimeSpan.TotalDays/365.2425 就可以了。

编辑:但仅用于粗略估计,不适用于生日。在生日计算中,正如 Henk Holterman 在评论中指出的那样,闰日将每 4 年累积一次。看看here用于计算生日。

关于c# - 为什么 TimeSpan 没有 Years 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30059287/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com