> 文档中心 > JAVA中日期转换和日期计算的方法

JAVA中日期转换和日期计算的方法


JAVA中日期转换和日期计算的方法

1.不同格式日期相互转换方法

public class TestDateConvertUtil {    public static void main(String[] args) throws ParseException { // 获取当前时间 Date date = new Date(); // 获取当前时间 long timestamp = System.currentTimeMillis(); // 获取当前时间戳 // 日期格式转换 date2String(); // 日期转字符串 string2Date(); // 字符串转日期 date2Timestamp(); // 日期转时间戳 timestamp2Date(); // 时间戳转日期 cst2Date(); // CST格式转日期 nonstandard2Date(); // 非标准格式转日期 convertDateStr(); // 日期字符串格式转换 date2Calendar(); // 日期转日历 calendar2Date(); // 日历转日期    }    public static void date2String() { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date = new Date(); String dateStr = sdf.format(date); System.out.println(dateStr);    }    public static void string2Date() throws ParseException { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String dateStr = "2018-05-16 19:30:20"; Date date = sdf.parse(dateStr); System.out.println(date);    }    public static void date2Timestamp() { Date date = new Date(); String timestamp = String.valueOf(date.getTime()); System.out.println(timestamp);    }    public static void timestamp2Date() { String timestamp = "1526470220000"; Date date = new Date(new Long(timestamp)); System.out.println(date);    }    public static void cst2Date() throws ParseException { SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", java.util.Locale.US); // 注意使用Locale.US参数 String cst = "Tue May 16 19:30:20 CST 2018"; Date date = sdf.parse(cst); System.out.println(date);    }    public static void nonstandard2Date() throws ParseException { SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); sdf.setLenient(false); // 设置严格验证日期 String dateStr = "20180516"; Date date = sdf.parse(dateStr); System.out.println(date);    }    public static void convertDateStr() throws ParseException { SimpleDateFormat sdfSource = new SimpleDateFormat("yyyyMMdd"); SimpleDateFormat sdfTarget = new SimpleDateFormat("yyyy-MM-dd"); String dateSource = "20180516"; String dateTarget = sdfTarget.format(sdfSource.parse(dateSource)); System.out.println(dateTarget);    }    public static void date2Calendar() { Date date = new Date(); Calendar c = Calendar.getInstance(); c.setTime(date); System.out.println(c);    }    public static void calendar2Date() { Calendar c = Calendar.getInstance(); Date date = c.getTime(); System.out.println(date);    }}

2.日期计算方法

public class TestDateCalculateUtil {    public static void main(String[] args) throws ParseException { // 日期计算.例子:2018-05-16 19:30:20 DateUtils.setYears(new Date(), 2019); // 根据参数设置日期年份.输出:2019-05-16 19:30:20 DateUtils.addMonths(new Date(), -1); // 根据参数增加日期月份.输出:2019-04-16 19:30:20 DateUtils.truncate(new Date(), Calendar.DATE); // 根据参数截取日期.输出:2019-04-16 00:00:00 DateUtils.ceiling(new Date(), Calendar.DATE);  // 根据参数向上进位日期.输出:2018-05-17 00:00:00 DateUtils.getFragmentInDays(new Date(), Calendar.MONTH); // 根据参数截取范围内日期后返回天数.输出:16 DateUtils.truncatedEquals(new Date(), new Date(), Calendar.DATE); //根据参数范围比较日期是否相同,该例子只比较年月日.输出:true DateUtils.truncatedCompareTo(new Date(), new Date(), Calendar.MONTH); //根据参数范围比较日期大小,该例子只比较年月.输出:0 // 举例 getFirstSecondOfMonth(); // 获取当月第一秒 getLastSecondOfMonth(); // 获取当月最后一秒 getDayOfYear(); // 获取日期是该年的第几天 getFirstSundayOfMonth(); // 获取当月的第一个周日    }    public static void getFirstSecondOfMonth() { Date date = new Date(); date = DateUtils.truncate(date, Calendar.MONTH); // 截取日期到月份 System.out.println(date); // 输出:2018-05-01 00:00:00    }    public static void getLastSecondOfMonth() { Date date = new Date(); date = DateUtils.ceiling(date, Calendar.MONTH); // 向上进位月份 date = DateUtils.addSeconds(date, -1); // 减1秒 System.out.println(date); // 输出:2018-05-31 23:59:59    }    public static void getDayOfYear() { Date date = new Date(); long day = DateUtils.getFragmentInDays(date, Calendar.YEAR); // 截取年之后的日期部分,并按天数返回 System.out.println(day); // 输出:136    }    public static void getFirstSundayOfMonth() { Date date = new Date(); date = DateUtils.setDays(date, 1); // 从该月第一天开始 while (true) {     Calendar c = Calendar.getInstance();     c.setTime(date);     if (c.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) { // 比较该天是否为周日  System.out.println(date); // 输出:2018-05-06 19:30:20  break;     } else {  date = DateUtils.addDays(date, 1);     } }    }}

3.计算日期间隔的方法

public static void main(String[] args) { // 两个日期之间实际的间隔,并按规定格式返回,如:2018.8.31与2018.9.4 相差5天 String period = DurationFormatUtils.formatPeriod(DateUtils.addDays(new Date(), -5).getTime(), new Date().getTime(), "y-M-d"); System.out.println(period); // 相差5天,输出:0-0-5 // 计算两个月之间的间隔,跨月即算间隔1个月,如:2018.8.31与2018.9.4 相差1个月 int periodOfMonth = getPeriodOfMonth(DateUtils.addDays(new Date(), -5), new Date()); System.out.println(periodOfMonth); // 相差1个月,输出:1    }    public static int getPeriodOfMonth(Date dateBegin, Date dateEnd) { Date begin = DateUtils.truncate(dateBegin, Calendar.MONTH); Date end = DateUtils.truncate(dateEnd, Calendar.MONTH); String period = DurationFormatUtils.formatPeriod(begin.getTime(), end.getTime(), "M"); return Integer.parseInt(period);    }