Owe*_*son 11 c# datetime timespan
我正在写一个转换器,它取一个人的出生日期并生成他们的年龄.我写了一些看起来像这样的东西:
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();
}
}
Run Code Online (Sandbox Code Playgroud)
我发现除了两个对象之外没有任何Years属性.我对此感到有些惊讶.我想到为什么可能没有.我认为这可能是因为闰日,但按照这个逻辑,不应该因为夏令时.TimeSpanDateTimeYearsDays
没有Months明确的意义,因为没有标准的月份长度.
我能够编写一些不同的代码来获得正确的年龄,但我仍然真的想知道为什么没有Years或Weeks属性TimeSpan.有谁知道原因?
byt*_*e77 10
A TimeSpan仅包含两个值之间的差异DateTime.不知道这是哪一年TimeSpan.这也是它没有Months财产的原因.
例:
TimeSpan.FromDays(60)
Run Code Online (Sandbox Code Playgroud)
那几个月了?1还是2?
缺少月份是有道理的,因为没有标准月份长度.
由于闰年,没有标准的年份长度.
解决方法:如果你真的想要显示一个近似值,那么做TimeSpan.TotalDays / 365就好了.
编辑:但仅适用于粗略估计而非生日.在birhtday计算中,Henk Holterman在评论中指出,闰日将每4年累积一次.看看这里计算birhtdays.
程序员的生活真的很难.
年份的长短是多变的.有些年头有365几天,有些有366几天.根据日程表,有些年份甚至可能缺少日子.如果谈论文化,由于中国农历一年可以有13个月,因此变得更加困难.
月份的长度是可变的,这是众所周知的.这也是要知道在其他日历中事情会变得更糟.
由于夏令时,一天的长度是可变的,这不仅取决于文化,还取决于地理.
由于闰秒 s ,小时和分钟的长度是可变的.
似乎唯一可靠的是一秒钟的长度.因此在内部,时间跨度以秒(或毫秒,相同)存储.
但是时间单位的变化使得答案是" n几秒钟(年/月/日/小时/分钟)?" 永远不准确.
这就是为什么开发人员最终会得到一个实用但不精确的解决方案.他们完全忽略了夏令时和闰秒.然而,由于人们几乎不会问几年和几个月,他们只是决定不回答这些问题.
反问句:如果没有参照物,一年有多长?
由于 TimeSpan 没有固定的时间点,因此无法明确说出未知时间的一年有多长。在最简单的情况下,可能是 365 或 366 天。影响结果的案例要多得多。
| 归档时间: |
|
| 查看次数: |
1607 次 |
| 最近记录: |