相关文章推荐
豪爽的花生  ·  java date ...·  1 周前    · 
没人理的爆米花  ·  java ...·  1 周前    · 
俊逸的萝卜  ·  【Endnote ...·  8 月前    · 
慷慨的黄瓜  ·  org.postgresql.util.PS ...·  11 月前    · 
纯真的石榴  ·  [Solved] ...·  1 年前    · 

1.1 某(3)天前:取负值

Calendar calendar1 = Calendar.getInstance();
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyMMdd");
calendar1.add(Calendar.DATE, -3);
String three_days_ago = sdf1.format(calendar1.getTime());
System.out.println(three_days_ago);

1.2 同理,3天后,取正值即可:


Calendar calendar2 = Calendar.getInstance();
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyyMMdd");
calendar2.add(Calendar.DATE, 3);
String three_days_after = sdf2.format(calendar2.getTime());
System.out.println(three_days_after);

二. JDK8的处理方式 - LocalDate(Time)

1. JDK8中时间处理类库

之前的时间处理方式繁冗拖沓, jdk8带来了全新的时间处理工具类,位于jdk包(java.time)之下.

常用的类有以下几个类。

时间相关类 介绍
LocalDateTime 时间处理类,最高精确到纳秒
LocalDate 时间处理类,最高精确到天
DateTimeFormatter 时间格式化
ZoneId 时区设置类

2. 时间获取

使用不同的类可以获取不同精度的时间。

* 时间获取 @Test public void nowTimeTest() {     // 当前精确时间     LocalDateTime now = LocalDateTime.now();     System.out.println("当前精确时间:" + now);     System.out.println("当前精确时间:" + now.getYear() + "-" + now.getMonthValue() + "-" + now.getDayOfMonth() + " " + now.getHour() + "-" + now.getMinute() + "-" + now.getSecond());     // 获取当前日期     LocalDate localDate = LocalDate.now();     System.out.println("当前日期:" + localDate);     System.out.println("当前日期:" + localDate.getYear() + "-" + localDate.getMonthValue() + "-" + localDate.getDayOfMonth());     // 获取当天时间     LocalTime localTime = LocalTime.now();     System.out.println("当天时间:" + localTime);     System.out.println("当天时间:" + localTime.getHour() + ":" + localTime.getMinute() + ":" + localTime.getSecond());     // 有时区的当前精确时间     ZonedDateTime nowZone = LocalDateTime.now().atZone(ZoneId.systemDefault());     System.out.println("当前精确时间(有时区):" + nowZone);     System.out.println("当前精确时间(有时区):" + nowZone.getYear() + "-" + nowZone.getMonthValue() + "-" + nowZone.getDayOfMonth() + " " + nowZone.getHour() + "-" + nowZone.getMinute() + "-" + nowZone.getSecond());

获取到的时间:

当前精确时间:2019-10-24T00:26:41.724
当前精确时间:2019-10-24 0-26-41
当前日期:2019-10-24
当前日期:2019-10-24
当前精确时间(有时区):2019-10-24T00:26:41.725+08:00[GMT+08:00]
当前精确时间(有时区):2019-10-24 0-26-41
当天时间:00:26:41.725
当天时间:0:26:41

3. 时间创建

可以指定年月日时分秒创建一个时间类,也可以使用字符串直接转换成时间。

 * 时间创建 @Test public void createTime() {     LocalDateTime ofTime = LocalDateTime.of(2019, 10, 1, 8, 8, 8);     System.out.println("当前精确时间:" + ofTime);     LocalDate localDate = LocalDate.of(2019, 10, 01);     System.out.println("当前日期:" + localDate);     LocalTime localTime = LocalTime.of(12, 01, 01);     System.out.println("当天时间:" + localTime);

创建的时间:

当前精确时间:2019-10-01T08:08:08
当前日期:2019-10-01
当天时间:12:01:01

4. 时间转换

* 日期转换 @Test public void convertTimeTest() {     LocalDateTime parseTime = LocalDateTime.parse("2019-10-01T22:22:22.222");     System.out.println("字符串时间转换:" + parseTime);     LocalDate formatted = LocalDate.parse("20190101", DateTimeFormatter.BASIC_ISO_DATE);     System.out.println("字符串时间转换-指定格式:" + formatted);     // Date 转换成 LocalDateTime     Date date = new Date();     ZoneId zoneId = ZoneId.systemDefault();     System.out.println("Date 转换成 LocalDateTime:" + LocalDateTime.ofInstant(date.toInstant(), zoneId));     // LocalDateTime 转换成 Date     LocalDateTime localDateTime = LocalDateTime.now();     Date toDate = Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());     System.out.println("LocalDateTime 转换成 Date:" + toDate);\     // 当前时间转时间戳     long epochMilli = LocalDateTime.now().toInstant(ZoneOffset.of("+8")).toEpochMilli();     System.out.println("当前时间转时间戳:" + epochMilli);     // 时间戳转换成时间     LocalDateTime epochMilliTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(epochMilli), ZoneId.systemDefault());     System.out.println("时间戳转换成时间:" + epochMilliTime);

转换结果:

字符串时间转换:2019-10-01T22:22:22.222
字符串时间转换-指定格式:2019-01-01
Date 转换成 LocalDateTime:2019-10-24T00:46:41.251
LocalDateTime 转换成 Date:Thu Oct 24 00:46:41 GMT+08:00 2019
当前时间转时间戳:1571849201258
时间戳转换成时间:2019-10-24T00:46:41.258

5. 时间格式化

 * 日期格式化 @Test public void formatTest() {     LocalDateTime now = LocalDateTime.now();     System.out.println("当前时间:" + now);     System.out.println("格式化后:" + now.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME));     System.out.println("格式化后:" + now.format(DateTimeFormatter.ISO_LOCAL_DATE));     System.out.println("格式化后:" + now.format(DateTimeFormatter.ISO_LOCAL_TIME));     System.out.println("格式化后:" + now.format(DateTimeFormatter.ofPattern("YYYY-MM-dd hh:mm:ss")));

格式化后:

当前时间:2019-10-24T00:37:44.867
格式化后:2019-10-24T00:37:44.867
格式化后:2019-10-24
格式化后:00:37:44.867
格式化后:2019-10-24 12:37:44

6. 时间比较

 * 时间比较 @Test public void diffTest() {     LocalDateTime now = LocalDateTime.now();     LocalDateTime yestory = now.minusDays(1);     System.out.println(now + "在" + yestory + "之后吗?" + now.isAfter(yestory));     System.out.println(now + "在" + yestory + "之前吗?" + now.isBefore(yestory));     // 时间差     long day = yestory.until(now, ChronoUnit.DAYS);     long month = yestory.until(now, ChronoUnit.MONTHS);     long hours = yestory.until(now, ChronoUnit.HOURS);     long minutes = yestory.until(now, ChronoUnit.MINUTES);     System.out.println("相差月份" + month);     System.out.println("相差天数" + day);     System.out.println("相差小时" + hours);     System.out.println("相差分钟" + minutes);     // 距离JDK 14 发布还有多少天?     LocalDate jdk14 = LocalDate.of(2020, 3, 17);     LocalDate nowDate = LocalDate.now();     System.out.println("距离JDK 14 发布还有:" + nowDate.until(jdk14, ChronoUnit.DAYS) + "天");

比较结果:

2019-10-24T00:39:01.589在2019-10-23T00:39:01.589之后吗?true
2019-10-24T00:39:01.589在2019-10-23T00:39:01.589之前吗?false
相差月份0
相差天数1
相差小时24
相差分钟1440
距离JDK 14 发布还有:145天

7. 时间加减

 * 日期加减 @Test public void calcTest() {     LocalDateTime now = LocalDateTime.now();     System.out.println("当前时间:"+now);     LocalDateTime plusTime = now.plusMonths(1).plusDays(1).plusHours(1).plusMinutes(1).plusSeconds(1);     System.out.println("增加1月1天1小时1分钟1秒时间后:" + plusTime);     LocalDateTime minusTime = now.minusMonths(2);     System.out.println("减少2个月时间后:" + minusTime);

操作结果:

当前时间:2019-10-24T00:41:08.877
增加1月1天1小时1分钟1秒时间后:2019-11-25T01:42:09.877
减少2个月时间后:2019-08-24T00:41:08.877    

8. 时间扩展方法

 * 时间方法 @Test public void timeFunctionTest() {     LocalDateTime now = LocalDateTime.now();     System.out.println("当前时间:" + now);     // 第一天     LocalDateTime firstDay = now.withDayOfMonth(1);     System.out.println("本月第一天:" + firstDay);     // 当天最后一秒     LocalDateTime lastSecondOfDay = now.withHour(23).withMinute(59).withSecond(59);     System.out.println("当天最后一秒:" + lastSecondOfDay);     // 最后一天     LocalDateTime lastDay = now.with(TemporalAdjusters.lastDayOfMonth());     System.out.println("本月最后一天:" + lastDay);     // 是否闰年     System.out.println("今年是否闰年:" + Year.isLeap(now.getYear()));

输出结果:

当前时间:2019-10-24T00:43:28.296
本月第一天:2019-10-01T00:43:28.296
当天最后一秒:2019-10-24T23:59:59.296
本月最后一天:2019-10-31T00:43:28.296
今年是否闰年:false

Jdk1.8之后使用了新的时间处理工具包类, 用以替换之前的Calendar类, 并将时间处理相关工具类单独放到一个package中, 理解和使用更方便.

3天前:取负值 Calendar calendar1 = Calendar.getInstance();SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyMMdd");calendar1.add(Calendar.DATE, -3);String three_days_ago = sdf1.format(calen
java里怎么取离当前日期最近的一个星期??知道getNow import java。util。Calendar; import java。util。Date; public class Test { public static void main(String args[]){ //获得当前日...
Calendar:它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。 Calendar calendar2 = Calendar.getInstance(); SimpleDateFormat sdf2 = new SimpleDateFormat("yyy...
function GetDateStr(AddDayCount) { var dd = new Date(); dd.setDate(dd.getDate()+AddDayCount);//获取AddDayCount天后日期 var y = dd.getFullYear(); var m = (dd.getMonth()+1)<10 ? ('0'+
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class sss {     public static void main(String[] args) throws ParseExceptio 作者: Turbo时间限制: 2S章节: 函数 问题描述 : 写一个函数,传入年月日,计算它的第二,并返回该日期。由用户输入年月日和一个n值,使用前述函数,计算该日期加n日期为多少。 输入说明 : 输入year,month,day和n共4个正整数,以空格分隔。n的值不超过2000。 输出说明 : 输出计算得到的结果年月日共3个正整数,整数之间以一个空格分隔,行首与行尾无... public abstract void add(int field, int amount) 根据日历的规则,为给定的日历字段添加或减去指定的时间量。例如,要从当前日历时间减去 5 ,可以通过调用以下方法做到这一点: add(Calendar.DAY_OF_MONTH,... 大家注意观察上面的时间,我传入的时间是:2022年5月9日21:28:03,第二个参数表示前多少日期,我传入的是7,也就是一周。 显示的出来的日期正好是7日期,代码如下: * 根据当前时间获取往前n的时间 public static List<String> getWeekDateByCurrentDate(Date current.