`
phoenix007
  • 浏览: 430894 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java时间操作汇总

阅读更多
1.计算某一月份的最大天数
Calendar time=Calendar.getInstance();
time.clear();
time.set(Calendar.YEAR,year);
time.set(Calendar.MONTH,i-1);//注意,Calendar对象默认一月为0           
int day=time.getActualMaximum(Calendar.DAY_OF_MONTH);//本月份的天数
注:在使用set方法之前,必须先clear一下,否则很多信息会继承自系统当前时间
2.Calendar和Date的转化
(1) Calendar转化为Date
Calendar cal=Calendar.getInstance();
Date date=cal.getTime();
(2) Date转化为Calendar
Date date=new Date();
Calendar cal=Calendar.getInstance();
cal.setTime(date);
3.格式化输出日期时间
Date date=new Date();
SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
System.out.println(df.format(date));
4.计算一年中的第几星期
(1)计算某一天是一年中的第几星期
Calendar cal=Calendar.getInstance();
cal.set(Calendar.YEAR, 2006);
cal.set(Calendar.MONTH, 8 );
cal.set(Calendar.DAY_OF_MONTH, 3);
int weekno=cal.get(Calendar.WEEK_OF_YEAR);
(2)计算一年中的第几星期是几号
SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd");
Calendar cal=Calendar.getInstance();
cal.set(Calendar.YEAR, 2006);
cal.set(Calendar.WEEK_OF_YEAR, 1);
cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
System.out.println(df.format(cal.getTime()));
输出:
2006-01-02
5.add()和roll()的用法
(1)add()方法
SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd");
Calendar cal=Calendar.getInstance();
cal.set(Calendar.YEAR, 2006);
cal.set(Calendar.MONTH, 8 );
cal.set(Calendar.DAY_OF_MONTH, 3);
cal.add(Calendar.DATE, -4);
Date date=cal.getTime();
System.out.println(df.format(date));
cal.add(Calendar.DATE, 4);
date=cal.getTime();
System.out.println(df.format(date));
输出:
    2006-08-30
    2006-09-03
(2)roll方法
cal.set(Calendar.YEAR, 2006);
cal.set(Calendar.MONTH,  8 ) ;
cal.set(Calendar.DAY_OF_MONTH,  3);
cal.roll(Calendar.DATE, -4);
date=cal.getTime();
System.out.println(df.format(date));
cal.roll(Calendar.DATE, 4);
date=cal.getTime();
System.out.println(df.format(date));
输出:
    2006-09-29
    2006-09-03
可见,roll()方法在本月内循环,一般使用add()方法;
6.计算两个任意时间中间的间隔天数
(1)传进Calendar对象
/** *//**计算两个时间之间相隔天数
    * @param startday  开始时间
    * @param endday 结束时间
    * @return
    */
    public int getIntervalDays(Calendar startday,Calendar endday)...{
        //确保startday在endday之前
        if(startday.after(endday))...{
            Calendar cal=startday;
            startday=endday;
            endday=cal;
        }
        //分别得到两个时间的毫秒数
        long sl=startday.getTimeInMillis();
        long el=endday.getTimeInMillis();
       
        long ei=el-sl;   
        //根据毫秒数计算间隔天数
        return (int)(ei/(1000*60*60*24));
    }
(2)传进Date对象
/** *//**计算两个时间之间相隔天数
    * @param startday  开始时间
    * @param endday 结束时间
    * @return
    */
    public int getIntervalDays(Date startday,Date endday)...{
        //确保startday在endday之前
        if(startday.after(endday))...{
            Date cal=startday;
            startday=endday;
            endday=cal;
        }
        //分别得到两个时间的毫秒数
        long sl=startday.getTime();
        long el=endday.getTime();
       
        long ei=el-sl;   
        //根据毫秒数计算间隔天数
        return (int)(ei/(1000*60*60*24));
    }同理,可以用相同的方法计算出任意两个时间相隔的小时数,分钟数,秒钟数等
注:以上方法是完全按时间计算,有时并不能令人满意,如:
startday="2006-10-11 20:00:00"
endday="2006-10-12 8:00:00"
计算结果为0,但是我们也许相让计算结果变为1,此时可以用如下方法实现:
在传参之前,先设定endday的时间,如:
        endday.set(Calendar.HOUR_OF_DAY, 23);
        endday.set(Calendar.MINUTE, 59);
        endday.set(Calendar.SECOND, 59);
        endday.set(Calendar.MILLISECOND, 59);
这样再传进去startday,endday,则结果就如我们所愿了。不过,如果嫌以上方法麻烦,可以参考以下方法:
(3)改进精确计算相隔天数的方法
    public int getDaysBetween (Calendar d1, Calendar d2) ...{
        if (d1.after(d2)) ...{  // swap dates so that d1 is start and d2 is end
            java.util.Calendar swap = d1;
            d1 = d2;
            d2 = swap;
        }
        int days = d2.get(Calendar.DAY_OF_YEAR) - d1.get(Calendar.DAY_OF_YEAR);
        int y2 = d2.get(Calendar.YEAR);
        if (d1.get(Calendar.YEAR) != y2) ...{
            d1 = (Calendar) d1.clone();
            do ...{
                days += d1.getActualMaximum(Calendar.DAY_OF_YEAR);//得到当年的实际天数
                d1.add(Calendar.YEAR, 1);
            } while (d1.get(Calendar.YEAR) != y2);
        }
        return days;
    }
分享到:
评论

相关推荐

    java时间操作函数汇总

    java时间操作函数汇总

    java时间操作函数汇总.pdf

    java时间操作函数汇总.pdf

    java时间操作函数汇总[借鉴].pdf

    java时间操作函数汇总[借鉴].pdf

    java时间操作函数汇总[参考].pdf

    java时间操作函数汇总[参考].pdf

    JAVA日期操作汇总

    java日期的使用介绍和具体实现的示例 (适合新手) 1.计算某一月份的最大天数 Calendar time=Calendar.getInstance(); time.clear(); time.set(Calendar.YEAR,year); time.set(Calendar.MONTH,i-1);//注意,Calendar...

    Java二级考试试题库汇总

    二级JAVA真题2010年03月 一、选择题 1、下列叙述中正确的是( )。 A.对长度为n的有序链表进行查找,最坏情况下需要的比较次数为n B.对长度为n的有序链表进行对分查找,最坏情况下需要的比较次数为(n/2) C.对...

    【Java面试+Java后端技术学习指南】

    【Java面试+Java后端技术学习指南】:一份通向理想互联网公司的面试指南,包括 Java,技术面试必备基础知识、Leetcode、计算机操作系统、计算机网络、系统设计、分布式、数据库(MySQL、Redis)、Java 项目实战等 ...

    【Java面试+Java远程技术学习指南】

    一份通向理想互联网公司的面试指南,包括Java,技术面试必备基础知识、Leetcode、计算机操作系统、计算机网络、系统设计、概览、数据库( MySQL、Redis)、Java项目实战等 Java学习资源汇总(个人总结) Java...

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    上架时间:2010-3-30 出版日期:2010 年3月 开本:16开 其他详细信息查看:http://www.china-pub.com/196571 编辑推荐 Java编程老鸟潜心写作,奉献高效率的Java学习心得 完全站在没有编程经验读者的角度,...

    Java入门1·2·3:一个老鸟的Java学习心得.PART3(共3个)

    上架时间:2010-3-30 出版日期:2010 年3月 开本:16开 其他详细信息查看:http://www.china-pub.com/196571 编辑推荐 Java编程老鸟潜心写作,奉献高效率的Java学习心得 完全站在没有编程经验读者的角度,...

    Java参与购物广场美食节宣传活动代码设计,美食节盈利计划汇总分析.docx

    Java参与购物广场美食节宣传活动代码设计及美食节盈利计划汇总分析 本次美食节宣传活动旨在吸引更多顾客前来购物广场消费,提高购物广场在本地区的知名度和美誉度。为此,我们将采用Java语言编写代码,设计一款功能...

    Java游泳馆会员管理系统源码.zip

    消费管理:记录会员的消费情况,可以查看会员的消费金额、存款金额、结存余额,可 以查询任何一段时间内该卡的消费情况,也可以查询所有会员卡的汇总记录。 系统管理:包括参数设置、权限设置、更改密码等。

    Java Web编程宝典-十年典藏版.pdf.part2(共2个)

    1.4.2 web应用服务器汇总 1.4.3 获取Tomcat 1.4.4 熟悉Tomcat的五脏六腑 1.5 JavaWeb开发利器之Eclipse 1.5.1 获取Eciipse 1.5.2 运行Eclipse 1.5.3 打造中文版Eclipse 1.6 做好项日开发的准备工作 1.6.1 集成...

    JAVA图书馆管理系统课程设计报告.doc

    <3>FrMain.java 该文件是主界面的封装类,定义并设置了主界面相关组件及显示效果,还定义了菜单栏 上面各菜单项的监听事件,有系统管理:修改管理员密码、退出,基本操作:添加新读者 、新书入库、借书、还书、续借、...

    java常用工具类打包下载

    J2EE常用工具类汇总 J2EE常用工具类—Value Object工具类 J2EE常用工具类—Json工具 J2EE常用工具类—Jdbc操作 J2EE常用工具类—Hibernate操作 J2EE常用工具类—Cookie操作 J2EE常用工具类—数组操作 J2EE...

    java写的网络监控系统网络数据采集模块.zip

    java写的网络监控系统网络数据采集模块,基于java NIO,并没有使用MINA、netty等框架,主要通过采集端间歇性执行ping,telnet,tracert命令对执行的目标机器进行网络监控,并将监控结果汇总到服务器数据库。...

    基于JavaWeb的毕业设计管理系统【项目源码+数据库脚本】(毕设)

    答辩阶段,院系管理员可以进行的操作有:安排设置答辩教师分组,汇总学生论文成绩并发布。 4.系统管理员 是对系统所有信息进行维护,其权限具有的功能模块是:系统运行和系统维护。 系统运行:初始化系统,更新...

Global site tag (gtag.js) - Google Analytics