时间处理

简介: 时间处理

首先写了一个公用的转换帮助类

 package  com.dzf.test;

 import  java.math.BigDecimal;
 import  java.sql.Date;
 import  java.text.DecimalFormat;
 import  java.text.ParseException;
 import  java.text.SimpleDateFormat;

 public   class  ConvertHelper  {
    public static final String DecimalFormat = "###,###,###,##0.00";

    public static final String DateFormat = "yyyy-MM-dd";

    /**
     * 把字符串转换为整数。
     * 
     * @param str
     *            待转换的字符串
     * @return 整数
     * @throws Exception
     *             如果字符串格式不对
     */
    public static int StringToInt(String str) {
        if (str == null || str.equals("")) {
            return 0;
        } else {
            return Integer.parseInt(str);
        }
    }

    /**
     * 把字符串转换为长整形。
     * 
     * @param str
     *            待转换的字符串
     * @return 整数
     * @throws Exception
     *             如果字符串格式不对
     */
    public static long StringToLong(String str) {
        if (str == null || str.equals(""))
            return 0;
        return StringToNumber(str).longValue();

    }

    /**
     * 把字符串转换为DOUBLE。
     * 
     * @param str
     *            待转换的字符串
     * @return 整数
     * @throws Exception
     *             如果字符串格式不对
     */
    public static double StringToDouble(String str) {
        if (str == null || str.equals(""))
            return 0;
        return StringToNumber(str).doubleValue();

    }

    /**
     * 把字符串转换为Decimal。
     * 
     * @param str
     *            待转换的字符串
     * @return 整数
     * @throws Exception
     *             如果字符串格式不对
     */
    public static BigDecimal StringToDecimal(String str) {
        return new BigDecimal(StringToNumber(str).doubleValue());

    }

    /**
     * 把字符串转换为NUMBER。
     * 
     * @param str
     *            待转换的字符串
     * @return 整数
     * @throws Exception
     *             如果字符串格式不对
     */
    public static Number StringToNumber(String str) {
        if (str == null)
            return null;
        if (str.equals(""))
            str = "0";

        Number number;

        DecimalFormat df = new DecimalFormat(DecimalFormat);
        try {
            number = df.parse(str);
            return new BigDecimal(number.toString());
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 把BigDecimal类型转换为字符串
     * 
     * @param number
     * @return
     */
    public static String DecimalToString(BigDecimal number) {
        if (number == null) {
            return "0.00";
        }
        DecimalFormat df = new DecimalFormat(DecimalFormat);

        return df.format(number);
    }

    /**
     * 把Number类型转换为字符串
     * 
     * @param number
     * @return
     */
    public static String DecimalToString(Number number) {
        if (number == null) {
            return "0.00";
        }
        DecimalFormat df = new DecimalFormat(DecimalFormat);

        return df.format(number);
    }

    /**
     * 把double类型转换为字符串
     * 
     * @param number
     * @return
     */
    public static String DecimalToString(double number) {
        DecimalFormat df = new DecimalFormat(DecimalFormat);
        return df.format(number);
    }

    /**
     * 把long类型转换为字符串
     * 
     * @param number
     * @return
     */
    public static String DecimalToString(long number) {
        DecimalFormat df = new DecimalFormat(DecimalFormat);
        return df.format(number);
    }

    /**
     * 把java.util.Date类型转换为字符串
     * 
     * @param date
     * @return
     */
    public static String DateToString(java.util.Date date) {
        if (date == null)
            return "";
        SimpleDateFormat sdf = new SimpleDateFormat(DateFormat);
        return sdf.format(date);
    }

    /**
     * 把字符串转换为Date类型
     * 
     * @param str
     *            时间类型如"2007-10-28"
     * @return
     * @throws Exception
     */
    public static Date StringToDate(String str) {
        if (str == null || str.equals(""))
            return null;
        SimpleDateFormat sdf = new SimpleDateFormat(DateFormat);
        Date date;
        try {
            date = new Date(sdf.parse(str).getTime());
            return date;
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 把字符串转换为Date类型
     * 
     * @param str
     *            时间类型如"2007-10-28"
     * @param format
     *            时间格式如"yyyy-MM-dd"
     * @return
     * @throws Exception
     */
    public static Date StringToDate(String str, String format) {
        if (str == null || str.equals(""))
            return null;
        SimpleDateFormat sdf = new SimpleDateFormat(format);
        Date date;
        try {
            date = new Date(sdf.parse(str).getTime());
            return date;
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 将OBJECT转换为STRING
     * 
     * @param obj
     * @return 如果OBJ为NULL, 则返回null
     */
    public static String ObjToString(Object obj) {
        return ObjToString(obj, null);
    }

    /**
     * 将OBJECT转换为STRING
     * 
     * @param obj
     * @param retStr
     *            为空时的返回值
     * @return 如果OBJ为NULL, 则返回retStr
     */
    public static String ObjToString(Object obj, String retStr) {
        if (obj == null) {
            return retStr;
        }
        return obj.toString();
    }

    /**
     * 将传入的INT值,装换为固定字符补齐的字符串
     * 
     * @param value
     *            INT值
     * @param num
     *            长度
     * @param vchar
     *            字符
     * @return
     */
    public static String IntToString(int value, int num, char vchar) {
        StringBuffer result = new StringBuffer();
        result.append(new Integer(value).toString());
        while (num > result.length()) {
            result.insert(0, vchar);
        }
        return result.toString();
    }

    public static void main(String[] args) {
        try {
            System.out.print(ConvertHelper.StringToNumber("1.0"));
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

时间处理

 package  com.dzf.test;

 import  java.text.SimpleDateFormat;
 import  java.util.ArrayList;
 import  java.util.Calendar;
 import  java.util.Date;
 import  java.util.Iterator;
 import  java.util.List;

 public   class  DateUtil  {

    /**
     * 判断输入年份是否当前年份
     * 
     * @param year
     *            输入年份
     * @return true - 是 false - 不是
     */
    public static boolean isCurrentYear(String year) {
        Date date = new Date();
        SimpleDateFormat df = new SimpleDateFormat("yyyy");
        String strDate = df.format(date);
        if (strDate.equals(year)) {
            return true;
        }
        return false;
    }

    /**
     * 判断输入月份是否当前月份
     * 
     * @param year
     *            输入月份
     * @return true - 是 false - 不是
     */
    public static boolean isCurrentMonth(String month) {
        Date date = new Date();
        SimpleDateFormat df = new SimpleDateFormat("MM");
        String strDate = df.format(date);

        if (strDate.equals(month)) {
            return true;
        }
        return false;
    }

    /**
     * 获取输入日期的月份
     * 
     * @param date
     * @return
     */
    public static String getMonth(Date date) {
        SimpleDateFormat df = new SimpleDateFormat("MM");
        String strDate = df.format(date);
        return strDate;
    }

    /**
     * 获取输入日期的月份
     * 
     * @param strDate
     * @return
     * @throws Exception
     */
    public static String getMonth(String startDate) throws Exception {
        Date date = ConvertHelper.StringToDate(startDate);
        return getMonth(date);
    }

    /**
     * 获取输入日期的年份
     * 
     * @param date
     * @return
     */
    public static String getYear(Date date) {
        SimpleDateFormat df = new SimpleDateFormat("yyyy");
        String startDate = df.format(date);
        return startDate;
    }

    /**
     * 获取输入日期的年份
     * 
     * @param startDate
     * @return
     * @throws Exception
     */
    public static String getYear(String startDate) throws Exception {
        Date date = ConvertHelper.StringToDate(startDate);
        return getYear(date);
    }

    /**
     * 根据输入的某天,返回该月第一天或者最后一天
     * 
     * @param startDate
     *            某天
     * @param flag
     *            0 - 第一天 1 - 最后一天
     * @return
     * @throws Exception
     */
    public static String getFirstOrLastDay(Date date, int flag)
            throws Exception {
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM");
        String startDate = df.format(date) + "-01";
        // 取第一天
        if (flag == 0) {
            return startDate;
        }
        Date firstdate = ConvertHelper.StringToDate(startDate);
        // 取最后一天
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(firstdate);
        calendar.add(Calendar.MONTH, 1);
        calendar.add(Calendar.DAY_OF_YEAR, -1);
        df = new SimpleDateFormat("yyyy-MM-dd");
        return df.format(calendar.getTime());
    }

    /**
     * 根据输入的某天,返回该月的最后一天
     * 
     * @param startDate
     *            某天
     * @return
     * @throws Exception
     */
    public static String getLastDay(Date date) throws Exception {
        return getFirstOrLastDay(date, 1);
    }

    /**
     * 根据输入的某天,返回该月第一天或者最后一天
     * 
     * @param startDate
     *            某天
     * @param flag
     *            0 - 第一天 1 - 最后一天
     * @return
     * @throws Exception
     */
    public static String getFirstOrLastDay(String startDate, int flag)
            throws Exception {
        Date date = ConvertHelper.StringToDate(startDate);
        return getFirstOrLastDay(date, flag);
    }

    /**
     * 根据输入的某天,返回该月最后一天
     * 
     * @param startDate
     *            某天
     * @return
     * @throws Exception
     */
    public static String getLastDay(String startDate) throws Exception {
        Date date = ConvertHelper.StringToDate(startDate);
        return getFirstOrLastDay(date, 1);
    }

    /**
     * 根据输入的年、月,返回该月第一天或者最后一天
     * 
     * @param year
     *            年
     * @param month
     *            月
     * @param flag
     *            0 - 第一天 1 - 最后一天
     * @return
     * @throws Exception
     */
    public static String getFirstOrLastDay(String year, String month, int flag)
            throws Exception {
        String startDate = year + "-" + month + "-01";
        return getFirstOrLastDay(startDate, flag);
    }

    /**
     * 根据输入的年、月,返回该月最后一天
     * 
     * @param year
     *            年
     * @param month
     *            月
     * @return
     * @throws Exception
     */
    public static String getLastDay(String year, String month) throws Exception {
        // 取当月最后一天
        return getFirstOrLastDay(year, month, 1);
    }

    /**
     * 根据本月日期,获取上月最后一天日期
     * 
     * @param date
     *            本月任意一天
     * @return 上月最后一天
     * @throws Exception
     */
    public static String getSyLastDay(Date date) throws Exception {
        // 取本月第一天
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM");
        String startDate = df.format(date);
        startDate = startDate + "-01";
        Date firstDate = ConvertHelper.StringToDate(startDate);
        // 取上月最后一天
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(firstDate);
        calendar.add(Calendar.DAY_OF_YEAR, -1);
        SimpleDateFormat dff = new SimpleDateFormat("yyyy-MM-dd");
        return dff.format(calendar.getTime());
    }

    /**
     * 根据本月日期,获取上月最后一天日期
     * 
     * @param startDate
     *            本月任意一天
     * @return 上月最后一天
     * @throws Exception
     */
    public static String getSyLastDay(String startDate) throws Exception {
        return getSyLastDay(ConvertHelper.StringToDate(startDate));
    }

    /**
     * 获取传入日期相邻第N个月的第一天或者最后一天
     * 
     * @param date
     * @param nearby
     *            相邻月份 - 2 当前日期之后2个月 -2 - 当前日期之前2个月
     * @param flag
     *            0 - 第一天 1 - 最后一天
     * @return 相邻第N个月的第一天或者最后一天
     * @throws Exception
     */
    public static String getNearbyMonthFirstOrLastDay(Date date, int nearby,
            int flag) throws Exception {
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM");
        String startDate = df.format(date) + "-01";
        Date firstdate = ConvertHelper.StringToDate(startDate);
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(firstdate);
        // 取第一天
        if (flag == 0) {
            calendar.add(Calendar.MONTH, nearby);
        } else { // 取最后一天
            calendar.add(Calendar.MONTH, nearby + 1);
            calendar.add(Calendar.DAY_OF_YEAR, -1);
        }
        df = new SimpleDateFormat("yyyy-MM-dd");
        return df.format(calendar.getTime());
    }

    /**
     * 获取传入日期相邻第N个月的第一天或者最后一天
     * 
     * @param startDate
     * @param nearby
     *            相邻月份 - 2 当前日期之后2个月 -2 - 当前日期之前2个月
     * @param flag
     *            0 - 第一天 1 - 最后一天
     * @return 相邻第N个月的第一天或者最后一天
     * @throws Exception
     */
    public static String getNearbyMonthFirstOrLastDay(String startDate,
            int nearby, int flag) throws Exception {
        return getNearbyMonthFirstOrLastDay(
                ConvertHelper.StringToDate(startDate), nearby, flag);
    }

    /**
     * 获取传入日期相邻第N个天的日期
     * 
     * @param date
     * @param nearby
     *            相邻天数 2 当前日期之后2天 -2 - 当前日期之前2天
     * @return 相邻第N个天的日期
     */
    public static String getNearbyDay(Date date, int nearby) {

        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);

        calendar.add(Calendar.DAY_OF_YEAR, nearby);

        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
        return df.format(calendar.getTime());
    }

    /**
     * 获取传入日期相邻第N个天的日期
     * 
     * @param startDate
     * @param nearby
     *            相邻天数 2 当前日期之后2天 -2 - 当前日期之前2天
     * @return 相邻第N个天的日期
     * @throws Exception
     */
    public static String getNearbyDay(String startDate, int nearby)
            throws Exception {
        return getNearbyDay(ConvertHelper.StringToDate(startDate), nearby);
    }

    /**
     * 获取某年某月的天数
     * 
     * @param year
     *            年份
     * @param month
     *            月份
     * @return days 本月份的天数
     */
    /*
     * public static int getMonthDays(int year, int month) { Calendar c1 =
     * Calendar.getInstance(); c1.set(year, month - 1, 1); Calendar c2 =
     * Calendar.getInstance(); c2.set(year, month, 1); long c2s =
     * c2.getTimeInMillis(); long c1s = c1.getTimeInMillis(); long day = 1 * 24 *
     * 60 * 60 * 1000; int days = (int) ((c2s - c1s) / day); //
     * System.out.println(year + "年" + month + "月有" + days + "天"); return days; }
     */
    public static int getMonthDays(int year, int month) {
        Calendar c = Calendar.getInstance();
        c.clear();
        c.add(Calendar.YEAR, year);
        c.add(Calendar.MONTH, month);
        int days = c.getActualMaximum(Calendar.DAY_OF_MONTH);
        // System.out.println(year + "年" + month + "月有" + days + "天");
        return days;
    }

    /**
     * 获取两个时间段的天数
     * 
     * @param startDate
     *            开始时间
     * @param endDate
     *            结束时间
     * @return days 返回两个时间段的天数
     */
    public static int getDaysBetween(String startDate, String endDate) {
        Calendar d1 = Calendar.getInstance();
        Calendar d2 = Calendar.getInstance();
        d1.clear();
        d2.clear();
        try {
            d1.setTime(ConvertHelper.StringToDate(startDate));
            d2.setTime(ConvertHelper.StringToDate(startDate));
        } catch (Exception e) {
            e.printStackTrace();
        }
        if (d1.after(d2)) {
            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);
        }
        // System.out.println(startDate + "至" + endDate + "有" + days + "天");
        return days;
    }

    /**
     * 获取增加月数后的月份
     * 
     * @param startDate
     *            开始时间
     * @param monthNum
     *            增加的月数
     * @return
     */
    public static String getEndDate(String startDate, int monthNum) {
        String resultDate;
        resultDate = "";
        try {
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(ConvertHelper.StringToDate(startDate));
            // calendar.add(Calendar.YEAR, monthNum);
            calendar.add(Calendar.MONTH, monthNum);
            calendar.add(Calendar.DATE, -1);
            Date date = calendar.getTime();
            resultDate = ConvertHelper.DateToString(date);
        } catch (Exception e) {
            e.printStackTrace();
        }
        // System.out.print(startDate+"增加"+monthNum+"月后的日期为"+resultDate);
        return resultDate;
    }

    /**
     * 获取某年第几个星期星期几的日期
     * 
     * @param year
     *            年份
     * @param weekOfYear
     *            第几个星期
     * @param DayOfWeek
     *            星期几
     * @return 日期
     */
    public static String getDayOfWeek(String year, String weekOfYear,
            String DayOfWeek) {
        String date;
        date = "";
        Calendar cal = Calendar.getInstance();
        try {
            cal.set(Calendar.YEAR, ConvertHelper.StringToInt(year));
            cal.set(Calendar.WEEK_OF_YEAR, ConvertHelper
                    .StringToInt(weekOfYear));
            cal.set(Calendar.DAY_OF_WEEK, ConvertHelper.StringToInt(DayOfWeek));
            date = ConvertHelper.DateToString(cal.getTime());
        } catch (Exception e) {
            e.printStackTrace();
        }
        // System.out.print(year+"年的第"+weekOfYear+"个星期的日期为"+date);
        return date;
    }

    /**
     * 获取日期为第几个星期
     * 
     * @param startDate
     * @return
     */
    public static int getWeekOfYear(String startDate) {
        int resultWeek = 0;
        try {
            Calendar c = Calendar.getInstance();
            c.setTime(ConvertHelper.StringToDate(startDate));
            resultWeek = c.get(Calendar.WEEK_OF_YEAR);
            // System.out.print(startDate+"为"+c.get(Calendar.YEAR)+"的第"+resultWeek+"个星期");
        } catch (Exception e) {
            e.printStackTrace();
        }
        return resultWeek;
    }

    /**
     * 获取某年某月所有星期的开始时间跟结束时间
     * @param year  
     * @param month
     * @return
     */
    public static List<String> getAllWeekOfMonth(String year, String month) {
        // SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        List<String> timeList;
        try {
            String last;
            last = DateUtil.getLastDay(year, month);
            timeList = new ArrayList<String>();
            // 一个星期的毫秒数
            long time = 7 * 3600 * 24 * 1000;
            // 一个月开始
            Date firstDay = ConvertHelper.StringToDate(year + "-" + month
                    + "-01");
            // 月的最后一天
            Date lastDay = ConvertHelper.StringToDate(last);
            // 最后一天的毫秒
            long endmonth = lastDay.getTime();
            Calendar calendar = Calendar.getInstance();
            // 得到月开始的那天所在周的周一日期
            calendar.setTime(firstDay);
            calendar.set(Calendar.DAY_OF_WEEK, 2);
            Date monday = calendar.getTime();
            String mon = ConvertHelper.DateToString(monday);
            // 得到月开始的那天所在周的周日日期
            calendar.set(Calendar.DAY_OF_WEEK, 1);
            Date sunday = calendar.getTime();
            // 由于系统要求一周是从周一开始周日结束 所以得到下周的周日
            calendar.setTimeInMillis(sunday.getTime() + time);
            sunday = calendar.getTime();
            String sun = ConvertHelper.DateToString(calendar.getTime());
            timeList.add(mon + "," + sun);
            // 循环得到本月的周
            for (int i = 0; i < 6; i++) {
                calendar.setTimeInMillis(monday.getTime() + time);
                monday = calendar.getTime();
                mon = ConvertHelper.DateToString(monday);
                calendar.setTimeInMillis(sunday.getTime() + time);
                sunday = calendar.getTime();
                sun = ConvertHelper.DateToString(sunday);
                if (monday.getTime() <= endmonth) {
                    timeList.add(mon + "," + sun);
                } else {
                    break;
                }
            }
            return timeList;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;

    }

    public static void main(String[] args) {
          List timeList = DateUtil.getAllWeekOfMonth("2008", "04");
          for (Iterator iter = timeList.iterator(); iter.hasNext();) { String
          element = (String) iter.next(); System.out.println(element); }
    }

}
目录
相关文章
|
17天前
|
数据采集 Java 数据挖掘
数据抓取与时间操作:结合 datetime 与 timedelta 进行定时任务管理
本文详细介绍了如何利用 Python 的 `datetime` 和 `timedelta` 库管理数据抓取的定时任务,特别是在纳斯达克股市开盘时间内定期抓取数据。通过代理 IP、多线程等技术,提高了抓取效率和稳定性,确保数据的实时性和准确性。
|
5月前
一文搞懂:两个日期的时间间隔
一文搞懂:两个日期的时间间隔
53 0
|
6月前
|
Python
Python日期与时间处理机制
Python日期与时间处理机制
51 0
|
6月前
【qt】一次性讲清楚日期和时间1
【qt】一次性讲清楚日期和时间
87 0
|
6月前
【qt】一次性讲清楚日期和时间2
【qt】一次性讲清楚日期和时间
38 0
|
6月前
|
安全 Java API
Java日期与时间处理详解
Java日期与时间处理详解
73 1
|
安全 Java API
jdk8获取当前时间|时间加减|java8时间格式化|时间处理工具|时间比较|线程安全的时间处理方法
jdk8获取当前时间|时间加减|java8时间格式化|时间处理工具|时间比较|线程安全的时间处理方法
|
JavaScript 前端开发
javascript时间函数的运用:根据开始时间和时间差来计算截至时间的解决方案
javascript时间函数的运用:根据开始时间和时间差来计算截至时间的解决方案
109 0
|
存储 算法 Unix
C++ 日期和时间编程总结
在 C++11 之前,C++ 编程只能使用 C-style 日期时间库,其精度只有秒级别,这对于有高精度要求的程序来说,是不够的。但这个问题在C++11 中得到了解决,C++11 中不仅扩展了对于精度的要求,也为不同系统的时间要求提供了支持。另一方面,对于只能使用 C-style 日期时间库的程序来说,C++17 中也增加了 timespec 将精度提升到了纳秒级别。
369 1