A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

小坏坏

中级黑马

  • 黑马币:33

  • 帖子:60

  • 精华:0

© 小坏坏 中级黑马   /  2014-6-16 21:51  /  1371 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

怎么实现2个日期的相加(日期格式YYYY-MM-DD),要求自己实现日期相加函数!

8 个回复

倒序浏览
1. 通过GregorianCalendar类,创建日期对象,
2. 通过GregorianCalendar中的 add(int field, int amount)方法,可以实现日期的相加。
回复 使用道具 举报
楼主,我才做的作业,是时间相减的,你稍微改一下,思路和讲解都有,这一块应该差不多了

*  需求:
*  "2014年6月7日 下午03时38分23秒", "2014年4月12日 下午11时56分59秒"
*  它们之间相隔多少天?
*  
*  思路:
*          由于给的字符串,首先我们需要把字符串变成日期,再把日期变成毫秒值,
*          2个毫秒值进行相减之后,就可以得到时间差的毫秒值,然后再转天数即可。
*  如何把一个字符串变成日期对象呢?
*          这时就需要找DateFormat类,它可以把日期变成字符串,同时也可以把字符串变成日期。
*  
*
*/

public class DateFormatDemo {

        public static void main(String[] args) throws ParseException {
                // 获取一个用于格式化日期的对象
                // DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT);
                DateFormat df = DateFormat.getDateTimeInstance(DateFormat.LONG,
                                DateFormat.LONG);
                // 获取一个日期对象
                Date d = new Date();
                // 将这个日期对象格式化成字符串
                String time = df.format(d);
                System.out.println(d);
                System.out.println(time);

                String s1 = "2014/6/7 13:38:23";
                String s2 = "2013-6-6 12-38-23";
                method_2(s1, s2);

        }

        /*
         * 真正在书写日期字符串形式时: 2014/04/04 23:23:23
         * 当获取到的日期字符串形式不是默认的四种格式之后,就无法解析了。那么需要使用DateFormat的子类SimpleDateFormat类根据
         * 我们指定的样式风格类解析。
         *
         * SimpleDateFormat它可以在创建对象的时候,根据我们指定的风格类解析和格式化日期 这里的风格我们可以根据自己的喜欢好指定
         *
         *
         * "2014/6/7 13:38:23"; ----> "yyyy/MM/dd hh:mm:ss"
         */
        public static void method_2(String s1, String s2) throws ParseException {
                // 自己指定格式化的风格
                SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy/MM/dd hh:mm:ss");
                SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd hh-mm-ss");
                Date d1 = sdf1.parse(s1);
                Date d2 = sdf2.parse(s2);
                // 通过日期对象获取毫秒值
                long t1 = d1.getTime();
                long t2 = d2.getTime();

                // 计算时间差
                long day = (Math.abs(t1 - t2)) / 1000 / 60 / 60 / 24;
                System.out.println(day);

        }

        /*
         * 这个方法的功能计算两个字符串表示的日期之间相差的天数 在使用DateFormat格式器进行把字符串解析成日期对象的时候,
         * 要求获取到的格式器一定要和给定的字符串表示的日期风格一致,如果不一致是解析不了
         */
        public static void method(String s1, String s2) throws ParseException {

                // 获取用于解析日期字符串的格式器
                DateFormat df = DateFormat.getDateTimeInstance(DateFormat.LONG,
                                DateFormat.LONG);
                // 把字符串解析成日期对象
                Date d1 = df.parse(s1);
                Date d2 = df.parse(s2);

                // 通过日期对象获取毫秒值
                long t1 = d1.getTime();
                long t2 = d2.getTime();

                // 计算时间差
                long day = (Math.abs(t1 - t2)) / 1000 / 60 / 60 / 24;
                System.out.println(day);

        }

}
回复 使用道具 举报
   这个是测试题吗
回复 使用道具 举报
崔湖尧 发表于 2014-6-16 22:03
1. 通过GregorianCalendar类,创建日期对象,
2. 通过GregorianCalendar中的 add(int field, int amount)方 ...

我想说的是可以不用系统自带的函数吗,这应该算一个算法题!
回复 使用道具 举报
江夷 发表于 2014-6-16 23:49
这个是测试题吗

表示 只是自己遇到的一个题
回复 使用道具 举报
人心如水 发表于 2014-6-16 22:25
楼主,我才做的作业,是时间相减的,你稍微改一下,思路和讲解都有,这一块应该差不多了

*  需求:

可以不用库函数吗?如getTime(),这是一个偏算法的题!
回复 使用道具 举报
小坏坏 发表于 2014-6-18 19:12
可以不用库函数吗?如getTime(),这是一个偏算法的题!

可以的,你可以用类型转换,然后纯计算!!不过不知道String类后面那几块你看过没有
回复 使用道具 举报
我用C++实现了日期相加,这只是个算法题,谢了!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马