概述
日期工具类,封装一些日期相关的方法。
(未完待续。。。)
代码
package com.wzh.utils;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
/**
* 日期工具类
*
* @author weizhenhui
* @date 2020/9/24 9:08
*/
public class DateUtil {
public static final String PATTERN_01 = "yyyyMMdd";
public static final String PATTERN_02 = "yyyy-MM-dd";
public static final String PATTERN_03 = "yyyyMMddHHmmss";
public static final String PATTERN_04 = "yyyy-MM-dd HH:mm:ss";
/**
* 按给定的格式获取当前日期的字符串
*
* @date: 2021/1/25 15:10
*/
public static String getDateString(String pattern) {
Date date = new Date();
DateFormat df = new SimpleDateFormat(pattern);
String datestr = df.format(date);
return datestr;
}
/**
* @description : 获取N天后的日期(N为负数时往前推)
* @date 2021/1/25 15:15
*/
public static String getDateByNum(String pattern, Integer num) {
if (null == num) {
num = 1;
}
Date date = new Date();
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
// 把日期往后增加一天.整数往后推,负数往前移动
calendar.add(Calendar.DATE, num);
// 这个时间就是日期往后推一天的结果
date = calendar.getTime();
DateFormat df = new SimpleDateFormat(pattern);
String datestr = df.format(date);
return datestr;
}
/**
* @description : 日期格式装换
* @date 2020/10/16 18:18
*/
public static String formatDateString(String oldDate, String sourcePattern, String targetPattern) {
String dataStr;
try {
DateFormat df1 = new SimpleDateFormat(sourcePattern);
Date date = df1.parse(oldDate);
DateFormat df2 = new SimpleDateFormat(targetPattern);
dataStr = df2.format(date);
} catch (ParseException e) {
dataStr = oldDate;
}
return dataStr;
}
/**
* 判断两个日期是否是同一周
* 思路: 因为1970年1月1是周四,所以(天数+4)/7 取整就是周数,如果相同就是同一周,反之就不是(是以星期一作为每周的第一天的)
*
* @param dateStr01 yyyy-MM-dd
* @param dateStr02 yyyy-MM-dd
* @return
*/
public static boolean isSameWeek(String dateStr01, String dateStr02, String pattern) {
boolean flag = false;
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
Date date01;
Date date02;
try {
date01 = sdf.parse(dateStr01);
date02 = sdf.parse(dateStr02);
} catch (ParseException e) {
return false;
}
if (null == date01 || null == date02) {
return false;
}
// 一天的毫秒数
long dayMillisecond = 1000 * 60 * 60 * 24;
// 计算两个日期的周数
long week01 = ((date01.getTime() / dayMillisecond) + 4) / 7;
long week02 = ((date02.getTime() / dayMillisecond) + 4) / 7;
// 如果两个日期周数相同说明在同一周
if (week01 == week02) {
flag = true;
}
return flag;
}
/**
* 计算当期日期的周数
* 1970年1月1是周四,所以(天数+4)/7 取整就是周数
*
* @return
*/
public static long getNowWeekNum() {
Date nowDate = new Date();
// 去掉时分秒,否则周日的周数有误差
SimpleDateFormat sdf = new SimpleDateFormat(PATTERN_02);
String newDateStr = sdf.format(nowDate);
Date targetDate;
try {
targetDate = sdf.parse(newDateStr);
} catch (ParseException e) {
targetDate = new Date();
}
// 一天的毫秒数
long dayMillisecond = 1000 * 60 * 60 * 24;
long weekNum = ((targetDate.getTime() / dayMillisecond) + 4) / 7;
return weekNum;
}
}
使用案例
import com.wzh.utils.DateUtil;
/**
* DateUtil 方法测试
* @date 2021/4/30 9:45
*/
public class DateUtilTest {
public static void main(String[] args) {
System.out.println("当前时间:" + DateUtil.getDateString(DateUtil.PATTERN_04));
System.out.println("4天后的日期是:" + DateUtil.getDateByNum(DateUtil.PATTERN_02, 4));
System.out.println("格式化后的日期是:" + DateUtil.formatDateString("20210430095124", DateUtil.PATTERN_03, DateUtil.PATTERN_04));
System.out.println("20210430跟20210505是否在同一周:" + DateUtil.isSameWeek("20210430", "20210505", DateUtil.PATTERN_01));
System.out.println("当前日期是第几周:" + DateUtil.getNowWeekNum());
}
}
输出结果:
当前时间:2021-04-30 09:57:09
4天后的日期是:2021-05-04
格式化后的日期是:2021-04-30 09:51:24
20210430跟20210505是否在同一周:false
当前日期是第几周:2678
版权声明:本文为qq_21758475原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。