日期:2014-05-18  浏览次数:20405 次

有关日期算法的问题 -- 具体要求看内容
找出计算年龄的最佳算法。

要求:
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的, 很简单,不要实现,数据库就干数据库的事情,如果你系统里有需要数据库做这件事情的,说明设计有问题,修改设计。