论坛首页 Java版

由计算两个年月日的时间差得到的感想

浏览 6646 次
该帖已经被评为隐藏帖
作者 正文
最后更新时间:2008-02-05

从前天开始公司的项目的代码就完成了,终于可以利用点业余时间来kill掉剩下的时间。今天同学去面试,面试的题目给你两个任意的年月份时间,计算这个两个年月份之间相差的分钟数?同学回来告诉我,怎么写,呵呵,认真写了一下,先把它记录下来。
package app.test;

public class DataTest {
    static int[] days = new int[] {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30,
                        31};
    public static void main(String[] orgs) {
        DataTest datatest = new DataTest();
        DateClass date1 = new DateClass();
        DateClass date2 = new DateClass();
        date1.year = 2009;
        date1.month = 3;
        date1.day = 28;
        date2.year = 2008;
        date2.month = 1;
        date2.day = 28;
        datatest.calculateMinute(date1, date2);
    }

    private  long calculateMinute(DateClass date1, DateClass date2) {
        long result = 0;
        int temp=0;
        if (date1.year - date2.year > 0) {
            temp += (date1.year - date2.year) * 365;
            for (int i = date2.year; i < date1.year; i++) {
                if ((i % 4 == 0 && i % 100 != 0) || i % 400 == 0) {
                    temp++;
                }
            }
            int daySpan1 = calculateDay(date1, days);
            int daySpan2 = calculateDay(date2, days);
            temp-=daySpan2;
            temp+=daySpan1;

        } else{
            int daySpan1 = calculateDay(date1, days);
            int daySpan2 = calculateDay(date2, days);
            temp = daySpan1 - daySpan2;
        }
        result += temp * 24 * 60;
        System.out.println(date1.year+"年"+date1.month+"月"+date1.day+"日"+"-----"+date2.year+"年"+date2.month+"月"+date2.day+"日"+"相差"+temp+"天");
        System.out.println(date1.year+"年"+date1.month+"月"+date1.day+"日"+"-----"+date2.year+"年"+date2.month+"月"+date2.day+"日"+"相差"+result+"分钟");
        return result;
    }

    private  int calculateDay(DateClass date, int[] days) {
        int result = 0;
        if ((date.year % 4 == 0 && date.year % 100 != 0)
            || date.year % 400 == 0) {
            days[1] = 29;
        }
        for (int i = 0; i < date.month - 1; i++) {
            result += days[i];
        }
        result += date.day;
        return result;
    }

}


class DateClass {
    int year;

    int month;

    int day;
}

很常时间没有写这些基础性的代码了,咋时还会被“简单”蒙骗,感觉很多算法都很简单,可是一下手,还是得思考一会,记得在大学的时候很崇拜的一位计算机编程高手说,“编程其实很简单,关键在于能否天天写”,是啊,忙的时候,也许一天可能会写好多行代码,不忙的时候也许就连一个单词也不会认真去写,每天可能就是做一些琐碎的事情来打磨时光,也许就在这时,我们错过了使我们尽快成为高手的队伍时机,你是否会认去真思考每个项目下来的感受,并把它记录下来,去思考那些由于在敢项目时候没有时间去优化的代码。在计算机编程这门学科里面,现在的人智商之间没有太大的差别,关键在于你怎么去面对你的职业,你喜爱的工作。中国的老话说得很棒:不积跬步,无以至千里。在这里,由于本人现在的水平问题,不敢再次放肆,说的太多。好了,欢迎大家指点,共同成长,即便是本篇文章再次入选”极度新手“的队伍也无所谓,在成长的路上,需要各路高人指点。

   
最后更新时间:2008-02-07
你知道J2ME的API吗?
看过没?不要乱说好吗?
j2ME里的API,有那么强大的功能吗?
你懂吗?不要用什么好像,不好像的。不懂就是不懂。
你好像没有写过文章,只在这里乱叫。
   
0 请登录后投票
最后更新时间:2008-02-06
LinuxFans 写道
你知道J2ME的API吗?
看过没?不要乱说好吗?
j2ME里的API,有那么强大的功能吗?
你懂吗?不要用什么好像,不好像的。不懂就是不懂。
你好像没有写过文章,只在这里乱叫。


你的文章里没有一个地方提到这是J2ME,人家怎么会知道?

就算是J2ME,里面也有Date这个类,(date1.getTime() - date2.getTime())/1000/60 就是分钟数,至于
你写的那么麻烦么。

人家提提意见,你就一跳三尺高,还谈什么“不积跬步,无以至千里”!
   
0 请登录后投票
最后更新时间:2008-02-07
对不起,是在看不惯C3PO在论坛上说别人这么差,我在JavaEye上面看见的都是他的损人的言论,是在受不了他这种坏习惯。
对了,要是能把字符串得到Date类型确实很好办,问题是怎么将如“2008年12月23”这样的字符串转化为Date类型了,呵呵。在jdk里面确实很简单就能通过SimpleDateFormat类直接转化,可是我在J2ME里面还真不知道怎么把字符串转化为Date类型,不妨你指点一下,谢谢了。
   
0 请登录后投票
最后更新时间:2008-02-07
太好了,谢谢了armorking,谢谢,很好。
在这里谢谢各位的指点,祝大家过个好年哦。
   
0 请登录后投票
最后更新时间:2008-02-07
其实计算一下两个日期之间相差的天数,更有趣一些。
   
0 请登录后投票
最后更新时间:2008-02-07
C3PO公子,你看来还是不了解啊,J2ME现在还不支持正则表达式。呵呵。
   
0 请登录后投票
最后更新时间:2008-02-09
呵呵,如果是我我会这样写:
1。写function判断是否是闰年;
2。写 function计算date是多少分钟;
3。相减。
这样代码清晰,以后的修改也是很方便的。
   
0 请登录后投票
最后更新时间:2008-02-09
C3PO 写道
吃饱撑了写这个。
call API把两个日期化成以毫秒记的长整型,减一减不就得了?
哦对了好像日期差分本来就有函数,减都不用减

一直以来觉得这个方法不准
比如 今天晚上的a 23:55 b 23:56和明天的c 00:01 明天的d 23:56
按照这个算法 ab  ac之间的天数就不好确定了  同样 ac 和ad也不好确定了毕竟数学上的计算和日常中的定义是不一样的
   
0 请登录后投票
最后更新时间:2008-02-12
刚学C的时候也写过这种代码,虽说思路很重要,但java代码这么写有点别扭。
lz后来辩解的有点离谱了。
lz所谓高手所说“编程很简单,看能不能天天写”不太靠谱,建议看看《理解专业程序员》,《Pragmatic programming》等读物。
   
0 请登录后投票
论坛首页 Java版

跳转论坛:
JavaEye推荐