`
phoenix007
  • 浏览: 438021 次
  • 性别: 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中,`Calendar`类提供了获取特定月份最大天数的功能。这在处理日期逻辑时非常有用,例如判断一个月份有多少天。 ```java Calendar time = ...

    JAVA日期操作汇总

    ### JAVA日期操作汇总 本文将对Java中的日期操作进行详细解析,主要涵盖以下几个方面: 1. 计算某个月份的最大天数; 2. `Calendar`与`Date`之间的转换; 3. 日期格式化; 4. 获取指定日期所在的周序号及设置某...

    java时间操作函数汇总.pdf

    Java时间操作函数主要涉及到对日期和时间的创建、转换、格式化、计算等操作,以下是对这些函数的详细说明: 1. **计算某一月份的最大天数** 使用`Calendar`类来获取特定年份和月份的最大天数。首先创建一个`...

    java树节点逐级汇总.zip

    例如,使用平衡树结构(如AVL或红黑树)可以确保插入、删除和查找操作的时间复杂度保持在O(log n)。 综上所述,"java树节点逐级汇总.zip"这个资源提供了从无序列表数据构建树形结构并进行逐级汇总的功能。开发者...

    java的文件操作汇总

    File类是Java中用来处理文件和目录的对象,它并不直接参与文件内容的读写,而是提供了诸如获取文件路径、文件名、是否为文件或目录、修改时间等元数据的方法。在处理文件或目录路径时,使用File对象可以避免平台相关...

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

    Java时间操作函数是Java编程中常见且重要的部分,主要用于处理日期和时间的计算、格式化以及转换等任务。以下是对这些函数的详细说明: 1. 计算某一月份的最大天数: `Calendar` 类提供了获取月份最大天数的方法 `...

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

    Java时间操作函数主要涉及到日期和时间的创建、转换、格式化以及各种计算,如获取月份最大天数、日期之间的转换、日期的格式化输出、计算一年中的第几星期以及日期的加减运算等。以下是对这些知识点的详细解释: 1....

    java工具类汇总

    - `java.time` 包:Java 8 引入了新的日期时间API,包括`LocalDate`、`LocalTime`、`LocalDateTime`、`ZonedDateTime`等类,提供了更强大且易于使用的日期时间操作功能。 - `java.util.Calendar`:旧版API,虽然...

    Java英文单词汇总

    Calendrical Calculations:日期计算,指的是某个日期或时间计算操作。 Call:调用,指的是某个函数或方法的调用操作。 Call Operator:调用操作符,指的是某个调用操作符或函数调用操作。 Callback:回调,指的...

    JAVA面试题总汇JAVA面试题总汇.doc

    【JAVA面试题总汇】 1. **final, finally, finalize的区别** - `final` 关键字用于声明不可变的变量、无法重写的类或方法。对于变量,一旦赋值后不可更改;对于类,表示该类不能被继承;对于方法,表示该方法不能...

    Java面试宝典 100家大公司java笔试题汇总 等

    【Java面试宝典】是为Java开发者准备的重要学习资源,主要涵盖了各大公司Java笔试题的汇总,旨在帮助求职者在面试前进行全面的复习和技能提升。这份资料的重要性不言而喻,因为它集成了多方面的Java知识,包括但不...

    java集合PDF汇总

    总的来说,这个PDF汇总提供了对Java集合框架中ArrayList、HashMap和LinkedHashMap的深入理解,包括它们的数据结构、操作原理、优缺点以及在实际应用中的选择策略。通过学习这些内容,开发者能够更好地利用Java集合...

    JAVA开发工具大汇总

    ### JAVA开发工具大汇总 #### 1. JDK (Java Development Kit) **简介**: JDK是由Sun Microsystems提供的免费Java开发工具包,随着Oracle收购Sun后继续维护和发展。它为开发者提供了丰富的语言特性和运行环境,同时...

    java关于时间的用法汇总

    - `java.util.Calendar`:提供了更高级别的日期和时间操作。 - `java.util.Date`:表示特定的时间点。 - `java.text.*`:包括`SimpleDateFormat`等用于日期和时间格式化的类。 #### 类定义 ```java public class ...

    java面试资料汇总

    Java面试资料汇总的知识点可以从多个方面来总结: 面向对象的编程特性包括封装、继承、多态和抽象,它们是面向对象编程的基础。 String在Java中不是基本数据类型,而是一个不可变的字符序列对象。 int是基本数据...

    java面试题汇总2017版

    Java作为一门广泛使用的编程语言,其面试题涵盖了众多领域,包括基础语法、面向对象、集合框架、多线程、异常处理、JVM内存模型、IO流、网络编程、设计模式、数据库操作、Spring框架等。这份2017版的Java面试题汇总...

    Java 加密技术汇总

    ### Java 加密技术汇总 #### 一、概述 在当今高度数字化的世界中,信息安全变得尤为重要。Java作为一种广泛应用的编程语言,在处理数据加密方面提供了多种工具和技术。本文将深入探讨Java中常用的加密技术,包括...

    Java基础知识汇总_java_

    I/O流是Java进行输入输出操作的基石,包括文件操作、网络通信等。Java的I/O流体系基于流的概念,分为字节流和字符流,有输入流和输出流之分,以及许多不同的子类,如FileInputStream、FileOutputStream、...

    Java常用词汇汇总

    在Java编程语言中,掌握一些常用的词汇和概念是至关重要的,这将有助于你更好地理解和编写代码。...通过阅读提供的"Java常用词汇汇总.txt"文件,你可以更深入地了解每个术语的详细解释和实际应用。

Global site tag (gtag.js) - Google Analytics