• 常见的日期问题计算


    一:计算两个日期之间相差几天

     1 /**
     2  * 
     3  */
     4 package com.hlcui.date;
     5 
     6 import java.text.ParseException;
     7 import java.text.SimpleDateFormat;
     8 import java.util.Calendar;
     9 import java.util.Date;
    10 
    11 import org.junit.Test;
    12 
    13 /**
    14  * @author Administrator
    15  * 
    16  */
    17 public class DateTest {
    18 
    19     @Test
    20     public void testBetweenDays() throws ParseException {
    21         int days = betweenDays("20160102", "20160303");
    22         System.out.println(days);
    23     }
    24 
    25     /**
    26      * 计算两个日期相差的天数
    27      * 
    28      * @throws ParseException
    29      */
    30     public int betweenDays(String oldDate, String newDate)
    31             throws ParseException {
    32         Calendar cal = Calendar.getInstance();
    33         cal.setTime(stringToDate(oldDate));
    34         long oldTime = cal.getTimeInMillis();
    35         cal.setTime(stringToDate(newDate));
    36         long newTime = cal.getTimeInMillis();
    37         return (int) ((newTime - oldTime) / (1000 * 24 * 3600));
    38     }
    39 
    40     /**
    41      * String转换为Date
    42      * 
    43      * @throws ParseException
    44      */
    45     public Date stringToDate(String date) throws ParseException {
    46         SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
    47         return sdf.parse(date);
    48     }
    49 
    50     /**
    51      * Date转换为String
    52      */
    53     public String dateToString(Date date) {
    54         SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
    55         return sdf.format(date);
    56     }
    57 }

    1:SimpleDateFormat类是一个格式化类,可以实现String类和Date之间的转换。
    Format(Date):Date转为String类型,Parse(String):String类型转为Date类型。

    2:Calendar.getInstance():可以通过Calendar的静态方法getInstance()获取Calendar对象。

    3:Calendar.setTime(Date):设置日期   Calendar.getTime():获取1970年1月1日至今的毫秒数

    二:计算当前日期距离本月最后一天的天数

    days  =  (最后一天的毫秒数   —   当前天数的毫秒数)/ (1000*60*60*24)

    /**
         * 计算当天到月末还有几天
         */
        @Test
        public void calDays() {
            Date now = new Date();
            Calendar cal = Calendar.getInstance();
            // 设置最后一天时间
            cal.set(Calendar.DAY_OF_MONTH, cal.getMaximum(Calendar.DAY_OF_MONTH));
            long days = (cal.getTime().getTime() - now.getTime())
                    / (1000 * 60 * 60 * 24);
            System.out.println(days);
        }

    cal.set(Calendar.DAY_OF_MONTH, cal.getMaximum(Calendar.DAY_OF_MONTH));

    其中Calendar类的API中

    set(int field, int value)

    将给定的日历字段设置为给定值。

    其中day_of_month 与 date是同义词,用哪个都可以。

    三:根据身份证号id计算年龄

     1 @Test
     2     public void testGetAgeById() {
     3         String id = "320382199011044135";
     4         System.out.println(getAgeById(id));
     5     }
     6 
     7     /**
     8      * 根据身份证号id获取年龄age
     9      * 
    10      * @throws ParseException
    11      */
    12     public String getAgeById(String id) {
    13         if (DateTest.isNotEmpty(id)) {
    14             String birthday = id.substring(6, 14);
    15             birthday = birthday.substring(0, 4) + "-"
    16                     + birthday.substring(4, 6) + "-" + birthday.substring(6);
    17             SimpleDateFormat sdf = new SimpleDateFormat(REGEX_SIMPLE);
    18             try {
    19                 Date birthDate = sdf.parse(birthday);
    20                 int age = getAge(birthDate);
    21                 return String.valueOf(age);
    22             } catch (ParseException e) {
    23                 e.printStackTrace();
    24             }
    25         }
    26         return null;
    27     }
    28 
    29     /**
    30      * 根据出生日期计算年龄
    31      */
    32     private int getAge(Date birth) {
    33         // 计算当前时间(年、月、日)
    34         Calendar cal = Calendar.getInstance();
    35         int nowYear = cal.get(Calendar.YEAR);
    36         int nowMonth = cal.get(Calendar.MONTH);
    37         int nowDay = cal.get(Calendar.DAY_OF_MONTH);
    38 
    39         // 计算出生时间(年、月、日)
    40         cal.setTime(birth);
    41         int birthYear = cal.get(Calendar.YEAR);
    42         int birthMonth = cal.get(Calendar.MONTH);
    43         int birthDay = cal.get(Calendar.DAY_OF_MONTH);
    44 
    45         // age = nowYear - birthYear, 如果nowMonth<birthMonth age--
    46         // 如果nowMonth == birthMonth 那么比较 nowDay < birthDay age--
    47         int age = nowYear - birthYear;
    48         if (nowMonth <= birthMonth) {
    49             if (nowMonth == birthMonth) {
    50                 if (nowDay < birthDay) {
    51                     age--;
    52                 }
    53             } else {
    54                 age--;
    55             }
    56         }
    57         return age;
    58 
    59     }

    四:计算当前时间到月末小时数

     1 @Test
     2     public void testGetHours() {
     3         System.out.println(getHours());
     4     }
     5 
     6     /**
     7      * 计算当前时间距离月末的小时数
     8      */
     9     public long getHours() {
    10         long hours = -1;
    11         try {
    12             // 当前时间毫秒数
    13             Date currentDate = new Date();
    14             long start = currentDate.getTime();
    15 
    16             // 月末毫秒数
    17             Calendar cal = Calendar.getInstance();
    18             cal.set(Calendar.DAY_OF_MONTH, cal
    19                     .getActualMaximum(Calendar.DAY_OF_MONTH));
    20             int year = cal.get(Calendar.YEAR);
    21             int month = cal.get(Calendar.MONTH) + 1;
    22             int day = cal.get(Calendar.DAY_OF_MONTH);
    23             String endDate = year + "-" + month + "-" + day + " 24:00:00";
    24             SimpleDateFormat sdf = new SimpleDateFormat(REGEX);
    25             long end = sdf.parse(endDate).getTime();
    26 
    27             // 小时数
    28             hours = (end - start) / (1000 * 60 * 60);
    29         } catch (ParseException e) {
    30             e.printStackTrace();
    31         }
    32         return hours;
    33     }

    五:获取当前时间和前一天日期

     1 // 获取当前时间和前一天日期
     2     @Test
     3     public void getCurrentTimeAndPreDate() {
     4         SimpleDateFormat sdf = new SimpleDateFormat(REGEX);
     5         System.out.println("当前时间为:
    " + sdf.format(new Date()));
     6 
     7         Calendar cal = Calendar.getInstance();
     8         cal.add(Calendar.DAY_OF_MONTH, -1);
     9         System.out.println("前一天日期为:
    " + sdf.format(cal.getTime()));
    10     }

    六:获得指定日期的前一天,后一天

     1 // 获得指定日期的前一天,后一天
     2     @Test
     3     public void getPreOrLastDayOfOneDay() {
     4         try {
     5             String date = "2012-10-09";
     6             SimpleDateFormat sdf = new SimpleDateFormat(REGEX_SIMPLE);
     7             Calendar cal = Calendar.getInstance();
     8 
     9             cal.setTime(sdf.parse(date));
    10             cal.add(Calendar.DAY_OF_MONTH, -1);
    11             System.out.println("前一天的日期为:
    " + sdf.format(cal.getTime()));
    12 
    13             cal.setTime(sdf.parse(date));
    14             cal.add(Calendar.DAY_OF_MONTH, 1);
    15             System.out.println("后一天的日期为:
    " + sdf.format(cal.getTime()));
    16 
    17         } catch (Exception e) {
    18             e.printStackTrace();
    19         }
    20 
    21     }

    七:时间戳转日期格式

    1 // 时间戳转日期格式
    2     @Test
    3     public void timestampConvertDate() {
    4         long time = System.currentTimeMillis();
    5         Date currentDate = new Date(time);
    6         SimpleDateFormat sdf = new SimpleDateFormat(REGEX);
    7         System.out.println("当前时间:
    " + sdf.format(currentDate));
    8     }

    八:计算某个日期是星期几

     1 // 计算某个日期是星期几
     2     @Test
     3     public void calWeekdayByDate() {
     4         try {
     5             String date = "2016-11-06";
     6             SimpleDateFormat sdf = new SimpleDateFormat(REGEX_SIMPLE);
     7             Calendar cal = Calendar.getInstance();
     8             cal.setTime(sdf.parse(date));
     9 
    10             System.out.println("该天为星期"
    11                     + WEEKDAY[cal.get(Calendar.DAY_OF_WEEK)-1]);
    12         } catch (Exception e) {
    13             e.printStackTrace();
    14         }
    15 
    16     }

    总结:

    对于日期的操作在java编码中使用也是比较多的,主要有几个类Date类、Calendar类以及long类型、String类型

    SimpleDateFormat转换类等,它们之间可以通过setTime()、getTime()等方法进行转换,如果需要获取某个日期,

    可以通过add()、以及set()方法实现,应该掌握一些比较常用的常量类,例如:DAY_OF_MONTH、YEAR、MONTH、

    DAY_OF_MONTH等等。

  • 相关阅读:
    SPI masterslave驱动框架分析
    linux内存分配方法总结
    C#图片适应PictureBox大小显示
    .NET下的AO对象的安全释放
    .net C# PropertyGrid 显示下拉列表
    Oracle事务细节问题
    C#中Remoting的IPC通信之Winform与Windows服务通信错误问题及解决
    windows服务的安装与卸载
    windows环境下Oracle数据库冷备份和恢复全过程
    OGR连接数据源读取矢量数据图层(C#)
  • 原文地址:https://www.cnblogs.com/warrior4236/p/5267424.html
Copyright © 2020-2023  润新知