Java时间的格式化、大小比较、指定日期的前后某一天的日期和星期几的工具类

在实际开发工作中,经常会遇到:时间格式化、时间大小比较、获取指定日期的前一天或前一个月或者后一个月、获取当前日期或具体时间、将时间差值由毫秒数转化为x天x时x分x秒的格式、获取某个月有多少天等这样的情况,现在,博主整理了这个具类,对于这种常见情况都可以解决。

Java通过年份和月份得到当月的天数:

/**
 * 通过年份和月份 得到当月的天数
 * @param year
 * @param month
 * @return
 */
public static int getMonthDays(int year, int month) {
    month++;
    switch (month) {
        case 1:
        case 3:
        case 5:
        case 7:
        case 8:
        case 10:
        case 12:
            return 31;
        case 4:
        case 6:
        case 9:
        case 11:
            return 30;
        case 2:
            if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) {
                return 29;
            } else {
                return 28;
            }
        default:
            return -1;
    }
}

Java/Android返回当前月份1号位于周几:

/**
 * 返回当前月份1号位于周几
 * @param year  年份
 * @param month 月份,传入系统获取的,不需要正常的
 * @return 日:1    一:2       二:3       三:4       四:5       五:6       六:7
 */
public static int getFirstDayWeek(int year, int month) {
    Calendar calendar = Calendar.getInstance();
    calendar.set(year, month, 1);
    return calendar.get(Calendar.DAY_OF_WEEK);
}

Java/Android获取指定日期是星期几:

/**
 * 获取指定日期是星期几
 * 参数为null时表示获取当前日期是星期几
 * @param specifiedDay:指定日期yyyy-MM-dd
 * @return
 */
public static String getWeekOfDate(String specifiedDay) {
    Date date = null;
    String[] weekOfDays = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
    try {
        date = new SimpleDateFormat("yyyy-MM-dd").parse(specifiedDay);
    } catch (ParseException e) {
        e.printStackTrace();
        date = new Date();
    }
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(date);
    int w = calendar.get(Calendar.DAY_OF_WEEK) - 1;
    if (w < 0) {
        w = 0;
    }
    return weekOfDays[w];
}

Java/Android获取当前时间【yyyy-MM-dd HH:mm:ss】:

/**
 * 获取当前时间【yyyy-MM-dd  HH:mm:ss】
 * @return
 */
public static String getNowTime() {
    //法1
    //Date date=new Date();
    //DateFormat format=new SimpleDateFormat("yyyy-MM-dd  HH:mm:ss");
    //String time=format.format(date);
    //return time;
    //法2
    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
    return df.format(new Date()).toString();// new Date()为获取当前系统时间
}

Java/Android获取当前日期【yyyy-MM-dd】:

/**
 * 获取当前日期【yyyy-MM-dd】
 * @return
 */
public static String getNowDate() {
    //法1
    //Date date=new Date();
    //DateFormat format=new SimpleDateFormat("yyyy-MM-dd");
    //String time=format.format(date);
    //return time;
    //法2
    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");//设置日期格式
    return df.format(new Date()).toString();// new Date()为获取当前系统时间
}

Java/Android获取当前时间【yyyy年MM月dd日】:

/**
 * 获取当前时间【yyyy年MM月dd日】
 */
public static String getCurrentDate2() {
    Date date = new Date();
    DateFormat format = new SimpleDateFormat("yyyy年MM月dd日");
    String time = format.format(date);
    return time;
}

Java/Android输入格式化时间yyyy-MM-dd HH:mm返回时间戳:

/**
 * 输入格式化时间yyyy-MM-dd HH:mm返回时间戳
 * 日期格式可修改
 */
public static long getTimeStamp(String time) {
    String SEPARATE = " ";//时间分隔符
    String TIME_FORMAT = "yyyy-MM-dd" + SEPARATE + "HH:mm";//时间格式
    SimpleDateFormat sdr = new SimpleDateFormat(TIME_FORMAT,
            Locale.CHINA);
    Date date;
    long timestamp = 0;
    try {
        date = sdr.parse(time);
        timestamp = date.getTime();
    } catch (ParseException e) {
        e.printStackTrace();
        return System.currentTimeMillis();
    }
    return timestamp;
}

Java/Android获取今天的前一天日期:

/***
 * 获取今天的前一天日期,不是指定日期的前一天,注意和getSpecifiedDayBefore的区别
 * 日期格式可修改
 */
public static String getNextDay() {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA);
    Calendar calendar = Calendar.getInstance();
    calendar.add(Calendar.DAY_OF_MONTH, -1);
    Date date = calendar.getTime();
    String now = sdf.format(date);
    return now;
}

Java/Android获得指定日期的前一天:

/**
 * 获得指定日期的前一天
 * 日期格式可修改
 * @param specifiedDay:2017-05-03
 * @return 2017-05-03的前一天
 * @throws Exception
 */
public static String getSpecifiedDayBefore(String specifiedDay) {
    Calendar c = Calendar.getInstance();
    Date date = null;
    try {
        date = new SimpleDateFormat("yyyy-MM-dd").parse(specifiedDay);
    } catch (ParseException e) {
        e.printStackTrace();
    }
    c.setTime(date);
    int day = c.get(Calendar.DATE);
    c.set(Calendar.DATE, day - 1);

    String dayBefore = new SimpleDateFormat("yyyy-MM-dd").format(c.getTime());
    return dayBefore;
}

Java/Android获得指定日期的后一天:

/**
 * 获得指定日期的后一天
 * 日期格式yyyy-MM-dd可修改
 * @param specifiedDay
 * @return
 */
public static String getSpecifiedDayAfter(String specifiedDay) {
    Calendar c = Calendar.getInstance();
    Date date = null;
    try {
        date = new SimpleDateFormat("yyyy-MM-dd").parse(specifiedDay);
    } catch (ParseException e) {
        e.printStackTrace();
    }
    c.setTime(date);
    int day = c.get(Calendar.DATE);
    c.set(Calendar.DATE, day + 1);

    String dayAfter = new SimpleDateFormat("yyyy-MM-dd")
            .format(c.getTime());
    return dayAfter;
}

Java/Android获取当前时间前一周、前一月、前三个月、前一年的时间:

/***
 * 日期格式可修改
 * java获取当前时间前一周、前一月、前三个月、前一年的时间
 * flag:1:表示获取当前时间前一周;2:当前时间前一个月;3:当前时间前三个月时间;4:当前时间前一年
 */
public static String getBeforeTime(int flag) {
    //SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    SimpleDateFormat format = new SimpleDateFormat(TIME_FORMAT);
    Calendar c = Calendar.getInstance();
    String beforeTime = "";
    switch (flag) {
        case 1:
            //过去七天
            c.setTime(new Date());
            c.add(Calendar.DATE, -7);
            Date d = c.getTime();
            String day = format.format(d);
            System.out.println("过去七天:" + day);
            beforeTime = day;
            break;

        case 2:
            //过去一月
            c.setTime(new Date());
            c.add(Calendar.MONTH, -1);
            Date m = c.getTime();
            String mon = format.format(m);
            System.out.println("过去一个月:" + mon);
            beforeTime = mon;
            break;

        case 3:
            //过去三个月
            c.setTime(new Date());
            c.add(Calendar.MONTH, -3);
            Date m3 = c.getTime();
            String mon3 = format.format(m3);
            System.out.println("过去三个月:" + mon3);
            beforeTime = mon3;
            break;

        case 4:
            //过去一年
            c.setTime(new Date());
            c.add(Calendar.YEAR, -1);
            Date y = c.getTime();
            String year = format.format(y);
            System.out.println("过去一年:" + year);
            beforeTime = year;
            break;

        default:
            //过去七天
            c.setTime(new Date());
            c.add(Calendar.DATE, -7);
            Date d2 = c.getTime();
            String day2 = format.format(d2);
            System.out.println("过去七天:" + day2);
            beforeTime = day2;
            break;
    }
    return beforeTime;
}

时间戳转化为聊天界面显示字符串:

/**
 * 时间转化为聊天界面显示字符串
 * @param timeStamp 单位为秒
 */
public static String getChatTimeStr(long timeStamp) {
    if (timeStamp == 0) return "";
    Calendar inputTime = Calendar.getInstance();
    inputTime.setTimeInMillis(timeStamp * 1000);
    Date currenTimeZone = inputTime.getTime();
    Calendar calendar = Calendar.getInstance();
    calendar.set(Calendar.HOUR_OF_DAY, 23);
    calendar.set(Calendar.MINUTE, 59);
    if (calendar.before(inputTime)) {
        //当前时间在输入时间之前
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
        return sdf.format(currenTimeZone);
    }
    calendar.set(Calendar.HOUR_OF_DAY, 0);
    calendar.set(Calendar.MINUTE, 0);
    calendar.set(Calendar.SECOND, 0);
    calendar.set(Calendar.MILLISECOND, 0);
    if (calendar.before(inputTime)) {
        SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
        return sdf.format(currenTimeZone);
    }
    calendar.add(Calendar.DAY_OF_MONTH, -1);
    if (calendar.before(inputTime)) {
        SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
        return "昨天" + " " + sdf.format(currenTimeZone);
    } else {
        calendar.set(Calendar.DAY_OF_MONTH, 1);
        calendar.set(Calendar.MONTH, Calendar.JANUARY);
        if (calendar.before(inputTime)) {
            SimpleDateFormat sdf = new SimpleDateFormat("MM月dd日 HH:mm");
            return sdf.format(currenTimeZone);
        } else {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm");
            return sdf.format(currenTimeZone);
        }
    }
}

Java/Android获取两个时间的日期差并转化为xx天xx时xx分xx秒的格式:

/**
 * 获取两个时间的日期差并转化为xx天xx时xx分xx秒的格式
 * @param date1 2004-03-26 13:31:40
 * @param date2 2004-01-02 11:30:24
 * @return
 */
public static String getDateCha(String date1, String date2) {
    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    if (date1 == null || date2 == null || "".equals(date2) || "".equals(date1)) {
        return null;
    }
    Date d1 = null;
    Date d2 = null;
    try {
        d1 = df.parse(date1);
        d2 = df.parse(date2);
    } catch (ParseException e) {
        e.printStackTrace();
        return null;
    }
    long l = d1.getTime() - d2.getTime();
    if (l < 0) {
        l = d2.getTime() - d1.getTime();
    }
    long day = l / (24 * 60 * 60 * 1000);
    long hour = (l / (60 * 60 * 1000) - day * 24);
    long min = ((l / (60 * 1000)) - day * 24 * 60 - hour * 60);
    long s = (l / 1000 - day * 24 * 60 * 60 - hour * 60 * 60 - min * 60);
    String time = "" + day + "天" + hour + "小时" + min + "分" + s + "秒";
    if (day == 0) {
        time = "" + hour + "小时" + min + "分" + s + "秒";
    }
    return time;
}

Java/Android比较两个格式化时间的大小:

/**
 * 比较两个格式化时间的大小
 * @param date1 2004-03-26 13:31:40.120
 * @param date2 2004-01-02 11:30:24.102
 * @return date1>date2 true;date1<=date2 false;
 */
public static boolean compareDate(String date1, String date2) {
    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.sss");
    if (date1 == null || date2 == null || "".equals(date2) || "".equals(date1)) {
        return false;
    }
    Date d1 = null;
    Date d2 = null;
    try {
        d1 = df.parse(date1);
        d2 = df.parse(date2);
    } catch (ParseException e) {
        e.printStackTrace();
        return false;
    }
    long l = d1.getTime() - d2.getTime();
    return l>0;
}

Java/Android将毫秒数转化为xx天xx时xx分xx秒的格式:

/**
 * 将毫秒数转化为xx天xx时xx分xx秒的格式
 * @param haomiao 毫秒数
 * @return
 */
public String getDateChaByHaoMiao(long haomiao) {
    if (haomiao <= 0) {
        return null;
    }
    long l = haomiao;
    long day = l / (24 * 60 * 60 * 1000);
    long hour = (l / (60 * 60 * 1000) - day * 24);
    long min = ((l / (60 * 1000)) - day * 24 * 60 - hour * 60);
    long s = (l / 1000 - day * 24 * 60 * 60 - hour * 60 * 60 - min * 60);
    String time = "" + day + "天" + hour + "小时" + min + "分" + s + "秒";
    if (day == 0) {
        time = "" + hour + "小时" + min + "分" + s + "秒";
    }
    return time;
}

Java/Android获取精确到毫秒的格式化时间:

/***
 * 获取精确到毫秒的格式化时间
 * @return
 */
public static String getJingQueTime() {
    Date now = new Date();
    SimpleDateFormat sdf = sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.sss", Locale.CHINA);
    String time = sdf.format(now);
    return time;
}

Java/Android验证字符串是否是一个合法的日期格式:

/**
 * 验证字符串是否是一个合法的日期格式
 * template:格式化模版,可以按照自己的需要修改
 * 使用方式:isValidDate("2017-05-10", "yyyy-MM-dd")或者
 *          isValidDate("2017-05-10 12:56", "yyyy-MM-dd HH:mm")
 *          isValidDate("2017-05-10 12:56:23", "yyyy-MM-dd HH:mm:ss")
 */
private boolean isValidDate(String date, String template) {
    boolean convertSuccess = true;
    // 指定日期格式
    SimpleDateFormat format = new SimpleDateFormat(template, Locale.CHINA);
    try {
        // 设置lenient为false.否则SimpleDateFormat会比较宽松地验证日期,比如2015/02/29会被接受,并转换成2015/03/01
        format.setLenient(false);
        format.parse(date);
    } catch (Exception e) {
        // 如果throw java.text.ParseException或者NullPointerException,就说明格式不对
        convertSuccess = false;
    }
    return convertSuccess;
}

至此,该工具类所有代码已经贴完毕,如果你喜欢或者觉得对你有用,欢迎点赞!

发表回复

后才能评论