`

Java日期公用处理类

    博客分类:
  • Java
阅读更多
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.LinkedHashMap;

/**
 * 日期公用处理类
 * 
 * @author SongJun
 * @version 1.3
 */
public class DateUtil {
    /**
     * 解析一个日期之间的所有月份
     * 
     * @param beginDateStr
     * @param endDateStr
     * @return
     */
    public static ArrayList getMonthList(String beginDateStr, String endDateStr) {
        // 指定要解析的时间格式
        SimpleDateFormat f = new SimpleDateFormat("yyyy-MM");
        // 返回的月份列表
        String sRet = "";

        // 定义一些变量
        Date beginDate = null;
        Date endDate = null;

        GregorianCalendar beginGC = null;
        GregorianCalendar endGC = null;
        ArrayList list = new ArrayList();

        try {
            // 将字符串parse成日期
            beginDate = f.parse(beginDateStr);
            endDate = f.parse(endDateStr);

            // 设置日历
            beginGC = new GregorianCalendar();
            beginGC.setTime(beginDate);

            endGC = new GregorianCalendar();
            endGC.setTime(endDate);

            // 直到两个时间相同
            while (beginGC.getTime().compareTo(endGC.getTime()) <= 0) {
                sRet = beginGC.get(Calendar.YEAR) + "-"
                        + (beginGC.get(Calendar.MONTH) + 1);
                list.add(sRet);
                // 以月为单位,增加时间
                beginGC.add(Calendar.MONTH, 1);
            }
            return list;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    /**
     * 解析一个日期段之间的所有日期
     * 
     * @param beginDateStr
     *            开始日期
     * @param endDateStr
     *            结束日期
     * @return
     */
    public static ArrayList getDayList(String beginDateStr, String endDateStr) {
        // 指定要解析的时间格式
        SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd");

        // 定义一些变量
        Date beginDate = null;
        Date endDate = null;

        Calendar beginGC = null;
        Calendar endGC = null;
        ArrayList list = new ArrayList();

        try {
            // 将字符串parse成日期
            beginDate = f.parse(beginDateStr);
            endDate = f.parse(endDateStr);

            // 设置日历
            beginGC = Calendar.getInstance();
            beginGC.setTime(beginDate);

            endGC = Calendar.getInstance();
            endGC.setTime(endDate);
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

            // 直到两个时间相同
            while (beginGC.getTime().compareTo(endGC.getTime()) <= 0) {

                list.add(sdf.format(beginGC.getTime()));
                // 以日为单位,增加时间
                beginGC.add(Calendar.DAY_OF_MONTH, 1);
            }
            return list;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    public static ArrayList getYearList() {
        ArrayList list = new ArrayList();
        Calendar c = null;
        c = Calendar.getInstance();
        c.setTime(new Date());
        int currYear = Calendar.getInstance().get(Calendar.YEAR);

        int startYear = currYear - 5;
        int endYear = currYear + 10;
        for (int i = startYear; i < endYear; i++) {
            list.add(new Integer(i));
        }
        return list;
    }

    public static int getCurrYear() {
        return Calendar.getInstance().get(Calendar.YEAR);
    }

    /**
     * 得到某一年周的总数
     * 
     * @param year
     * @return
     */
    public static LinkedHashMap getWeekList(int year) {
        LinkedHashMap map = new LinkedHashMap();
        Calendar c = new GregorianCalendar();
        c.set(year, Calendar.DECEMBER, 31, 23, 59, 59);
        int count = getWeekOfYear(c.getTime());

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        String dayOfWeekStart = "";
        String dayOfWeekEnd = "";
        for (int i = 1; i <= count; i++) {
            dayOfWeekStart = sdf.format(getFirstDayOfWeek(year, i));
            dayOfWeekEnd = sdf.format(getLastDayOfWeek(year, i));
            map.put(new Integer(i), "第"+i+"周(从"+dayOfWeekStart + "至" + dayOfWeekEnd+")");
        }
        return map;

    }
    
    /**
     * 得到一年的总周数
     * @param year
     * @return
     */
    public static int getWeekCountInYear(int year){
        Calendar c = new GregorianCalendar();
        c.set(year, Calendar.DECEMBER, 31, 23, 59, 59);
        int count = getWeekOfYear(c.getTime());
        return count;
    }

    /**
     * 取得当前日期是多少周
     * 
     * @param date
     * @return
     */
    public static int getWeekOfYear(Date date) {
        Calendar c = new GregorianCalendar();
        c.setFirstDayOfWeek(Calendar.MONDAY);
        c.setMinimalDaysInFirstWeek(7);
        c.setTime(date);

        return c.get(Calendar.WEEK_OF_YEAR);
    }

    /**
     * 得到某年某周的第一天
     * 
     * @param year
     * @param week
     * @return
     */
    public static Date getFirstDayOfWeek(int year, int week) {
        Calendar c = new GregorianCalendar();
        c.set(Calendar.YEAR, year);
        c.set(Calendar.MONTH, Calendar.JANUARY);
        c.set(Calendar.DATE, 1);

        Calendar cal = (GregorianCalendar) c.clone();
        cal.add(Calendar.DATE, week * 7);

        return getFirstDayOfWeek(cal.getTime());
    }

    /**
     * 得到某年某周的最后一天
     * 
     * @param year
     * @param week
     * @return
     */
    public static Date getLastDayOfWeek(int year, int week) {
        Calendar c = new GregorianCalendar();
        c.set(Calendar.YEAR, year);
        c.set(Calendar.MONTH, Calendar.JANUARY);
        c.set(Calendar.DATE, 1);

        Calendar cal = (GregorianCalendar) c.clone();
        cal.add(Calendar.DATE, week * 7);

        return getLastDayOfWeek(cal.getTime());
    }
    
    /**
     * 得到某年某月的第一天
     * @param year
     * @param month
     * @return
     */
    public static Date getFirestDayOfMonth(int year,int month){
        month = month-1;
        Calendar   c   =   Calendar.getInstance();   
        c.set(Calendar.YEAR, year);
        c.set(Calendar.MONTH, month);
        
        int day = c.getActualMinimum(c.DAY_OF_MONTH);

        c.set(Calendar.DAY_OF_MONTH, day);
        return c.getTime();
        
    }
    
    /**
     * 提到某年某月的最后一天
     * @param year
     * @param month
     * @return
     */
    public static Date getLastDayOfMonth(int year,int month){
        month = month-1;
        Calendar   c   =   Calendar.getInstance();   
        c.set(Calendar.YEAR, year);
        c.set(Calendar.MONTH, month);
        int day = c.getActualMaximum(c.DAY_OF_MONTH);
        c.set(Calendar.DAY_OF_MONTH, day);
        return c.getTime();
    }

    /**
     * 取得当前日期所在周的第一天
     * 
     * @param date
     * @return
     */
    public static Date getFirstDayOfWeek(Date date) {
        Calendar c = new GregorianCalendar();
        c.setFirstDayOfWeek(Calendar.MONDAY);
        c.setTime(date);
        c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek()); // Monday
        return c.getTime();
    }

    /**
     * 取得当前日期所在周的最后一天
     * 
     * @param date
     * @return
     */
    public static Date getLastDayOfWeek(Date date) {
        Calendar c = new GregorianCalendar();
        c.setFirstDayOfWeek(Calendar.MONDAY);
        c.setTime(date);
        c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek() + 6); // Sunday
        return c.getTime();
    }

}
分享到:
评论

相关推荐

    封装java常用工具的类

    6. **时间类**:Java 8引入了新的日期和时间API(java.time包),它提供了更直观、更易于使用的日期、时间、时区处理功能,替代了之前的java.util.Calendar和java.util.Date。 7. **数据库连接池**:例如,C3P0、...

    Java开发技术大全(500个源代码).

    common.java 一个公用类 derive.java 一个测试用子类 differ.java 测试静态方法与实例方法之间的区别 forefather.java 一个简单的基类 grandson.java 上面这个类的子类 hasConstructor.java 拥有构造器的类 ...

    Hutool (Java基础工具类).rar

    在开发的过程中,我们需要一些工具类实现某些特殊处理,例如字符串格式处理,日期处理,文件处理等操作。如果在传统的开发过程中,我们将自己开发一些工具类用于实现这些功能。但自己开发可能就会在不经意间由于代码...

    java项目中公共模块内容详细

    2. **日期处理**:Java的日期时间处理主要包括`java.util.Date`、`java.time`包(Java 8及以上版本)和Joda-Time库。这些API用于获取当前日期、时间,进行日期计算,格式化和解析日期字符串等操作。例如,`...

    watson:用Java编写的日常工作中的一些公用程序utils代码

    1. **Java工具类库**: 在Java开发中,工具类库通常是一系列静态方法集合,提供了各种通用功能,如字符串操作、日期时间处理、数学计算、IO操作等。Watson项目可能包含了这些常见的工具类,帮助开发者快速实现常见...

    java开发jar汇总

    177个JAR文件的汇总意味着这个集合覆盖了大量的常用库和组件,包括但不限于网络通信、数据解析、日期时间处理、加密解密、国际化支持等。开发者可以根据实际需求,选择相应的JAR包引入到项目中,大大提高了开发效率...

    宾馆管理系统。博客系统。OA系统用到的公用JAR2

    例如,数据库连接池(如C3P0、Apache DBCP)、加密解密工具(如AES、RSA)、日期时间处理库(如Java 8的java.time包)等。 博客系统则关注于内容发布、用户互动和信息分享,可能需要公用JAR2中的模板引擎(如...

    ArcGIS Server Java ADF案例教程

    - **UtilityObjects的使用**:UtilityObjects是ADF中用于封装公用功能的对象,如日期处理、字符串操作等。合理利用UtilityObjects,可以显著提高应用程序的开发效率和代码质量。 #### 结语 ArcGIS Server Java ADF...

    Java开发技术大全 电子版

    6.2Java的异常处理机制221 6.3异常类的层次结构222 6.3.1运行时异常222 6.3.2检查型异常223 6.3.3自定义异常224 6.4捕获和处理异常224 6.5抛出异常228 6.6try-catch-finally语句的嵌套231 6.7用户自定义异常...

    android-commons:Android公用程式(例如Java端的Apache公用程式)

    3. **DateUtils**: 日期和时间操作的工具类,提供了格式化日期、比较日期、解析日期等功能,使得日期处理更为便捷。 4. **FileUtils**: 文件操作类,包括创建、删除、移动、重命名文件,以及目录操作,有助于简化...

    java英语单词学习

    - **public** ['pʌblik]:表示“公共的”或“公用的”,在 Java 中用于修饰类、方法或变量,表明它们可以被任何其他类访问。 - **static** ['stætik]:意为“静的”、“静态的”或“静止的”,用来修饰类、方法或...

    elasticsearch-analysis-ik-6.8.2.zip

    新版本的IK Analyzer 3.0则发展为面向Java的公用分词组件,独立于Lucene项目,同时提 供了对Lucene的默认优化实现。 采用了特有的“正向迭代最细粒度切分算法“,具有80万字/秒的高速处理能力 采用了多子处理器...

    大学生java实习总结报告范文.pdf

    在项目开始前,明确每个人的职责,确保公用资源的统一管理,可以提高效率并减少冲突。作为组长,不仅要完成个人任务,还需要协调团队合作,确保项目的顺利进行。 2. **功能设计与测试心得** - **登录功能**:登录...

    JSTL详细标签库介绍

    首步我们一般在程序中先处理我们完成异常处理的类,完成异常处理的功能,因为可能除数为0是会出现异常,我们查找java.lang包中各个Exception类,发现RuntimeException类集合中的ArithmeticException可以处理运算异常...

    personal-utils:只是一些个人公用事业

    2. **日期时间处理**:Java 8引入了新的日期和时间API,但仍然有许多开发者使用旧的`java.util.Date`和`java.text.SimpleDateFormat`。个人工具包可能封装了这些API,提供易用的日期时间格式化和计算方法。 3. **...

    IKAnalyzer中文分词器 3.2.0 源码包.rar

    新版本的IKAnalyzer3.0则发展为面向Java的公用分词组件,独立于Lucene项目,同时提供了对Lucene的默认优化实现。 IKAnalyzer3.0特性: 采用了特有的“正向迭代最细粒度切分算法“,具有60万字/秒的高速处理能力...

    开发者突击公共lab1

    在描述中提到的"公用类1",可能是指一个通用的工具类,包含了一系列常用的方法,例如字符串处理、日期时间操作、数学计算等,供开发者在编写代码时调用。这样的类通常被设计成可以复用的,以提高代码的可维护性和...

    IKAnalyzer中文分词器 v3.2 使用手册.rar

    新版本的IKAnalyzer3.0则发展为面向Java的公用分词组件,独立于Lucene项目,同时提供了对Lucene的默认优化实现。 IKAnalyzer3.0特性: 采用了特有的“正向迭代最细粒度切分算法“,具有60万字/秒的高速处理能力。...

    IKAnalyzer 3.0 中文分词器

    新版本的IKAnalyzer3.0 则发展为面向Java的公用分词组件,独立于Lucene项目,同时提供了对Lucene的默认优化实现。 1.2IKAnalyzer3.0特性 * 采用了特有的“正向迭代最细粒度切分算法“,具有50万字/秒的高速处理...

    Duree_de_vol:程序java qui calcul lesduréede vol

    3. **日期和时间处理**:Java提供`java.time`包,包含`LocalDateTime`, `Duration`等类,可以用来处理日期、时间以及时间间隔,如计算飞行时间。例如,用户可能输入出发时间和到达时间,程序将两者相减得到飞行时间...

Global site tag (gtag.js) - Google Analytics