有关日期算法的问题 -- 具体要求看内容
找出计算年龄的最佳算法。
要求:
1.精确到天,比如出生年月是2/18/2000,2/17/2008的时候年龄是7岁,而不是8岁。
2 返回数字型年龄
3 返回字符串,4岁以下的返回月,例如10 months,4岁以上的返回年,如 65 years
4 注意每个月的天数区别,闰年也要考虑
5 用sql, c#, asp, javascript, java 5种语言实现同样的算法,确保整个系统都可以用。
------解决方案--------------------有很大难度写出这样的SQL语句,你去问一下皱建
------解决方案--------------------没什么难度的问题啊,思维慎密一些的人能够一次写好,不行的话就先写一堆unit test的test case辅助咯。你想要思路的话,用Reflector看DateTime的operator -运算,因为你所说的功能DateTime配合TimeSpan都能实现,你参考DateTime的源代码就是了。
------解决方案--------------------算年龄有点实际问题要考虑。
lz算年龄精确到天,太书呆子了。
实际社会中说年龄,有时候用生日,有时候用元旦,有时候用春节,作断年份。
只有小孩才有“3岁半、5岁半”这种说法,大人报告年龄都是整数。
------解决方案--------------------mark...
------解决方案--------------------asp不能算语言...
SQL函数比较简单
先帮顶
------解决方案--------------------纯属吃饱了撑的。
------解决方案--------------------你看看这样整,如果当前月日小于生日月日,那么生日年份+1,然后再用当前年份-生日年份,不就是年龄了吗?
------解决方案--------------------这个逻辑不行吗?主要就是天的精确,别的都没啥了就,有人真的用润年算生日马?
------解决方案--------------------哪有那么麻烦?这么简单的问题搞得很高难度似的。
给你一段C#的算年龄的代码
DateTime dt = new DateTime(2006, 2, 14);
int age = DateTime.Now.Year - dt.Year;
if (dt.AddYears(age) > DateTime.Now)
{
age--;
}
Console.WriteLine(age.ToString());
if (age < 4)
{
int month = DateTime.Now.Month - dt.Month;
if (dt.Day > DateTime.Now.Day)
{
month--;
}
if (month < 0)
{
month += 12;
}
month += age * 12;
Console.WriteLine(month.ToString() + " months");
}
------解决方案--------------------
C#写个WebService, 然后javascript可以调用,java可以调用,ASP可以调用,C#更加可以调用~~~ 这样就4种都有了,何必实现4份呢?
至于WebService里面实现那就简单了,求TimeSpan的 TotalMonth, 如果小于48就直接输出月,否则输出TotalYear ,然后格式化字符串。搞定~~
保证精确到秒都行了。。。。而且闰年闰月全考虑到了。。。
剩下最后一个问题,Sql的, 很简单,不要实现,数据库就干数据库的事情,如果你系统里有需要数据库做这件事情的,说明设计有问题,修改设计。