Java日期计算常用方法《简述版》

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 🌊 《IDEA开发秘籍专栏》学会IDEA常用操作,工作效率翻倍~💐 🌊 《100天精通Golang(基础入门篇)》学会Golang语言,畅玩云原生,走遍大小厂~💐

🪁🍁 希望本文能够给您带来一定的帮助🌸文章粗浅,敬请批评指正!🍁🐥

Java日期计算常用方法《简述版》

Java中进行日期计算常用的方法包括以下几种,这里提供简要的总结:

  1. java.util.Date 和 java.util.Calendar:
    • java.util.Date 类已经过时,不推荐使用。java.util.Calendar 提供了日期和时间的基本操作方法,但使用起来繁琐。
  2. java.time包(Java 8引入的新时间API):
    • LocalDate:处理日期,无时区信息。
    • LocalTime:处理时间,无日期信息。
    • LocalDateTime:处理日期和时间。
    • ZonedDateTime:带有时区信息的日期和时间。
    • Period:处理日期间隔。
    • Duration:处理时间间隔。
  3. 日期计算操作:
    • 创建日期对象:使用上述类的静态方法或构造函数创建。
    • 增减日期:使用plusminus方法,传入PeriodDuration对象。
    • 计算两个日期的间隔:使用ChronoUnit类的静态方法,例如ChronoUnit.DAYS.between(date1, date2)
  4. 格式化和解析日期:
    • 使用DateTimeFormatter类进行日期和时间的格式化和解析。
  5. 常用操作:
    • 获取当前日期和时间:使用LocalDate.now()LocalTime.now()LocalDateTime.now()
    • 获取特定日期或时间:使用of方法,如LocalDate.of(2023, 8, 11)
    • 判断日期前后:使用isBeforeisAfter等方法进行比较。

总的来说,Java 8 引入的java.time包提供了更为方便和灵活的日期计算方式,避免了以前java.util.Calendar的繁琐操作。根据需要,选择适合的日期类和方法来执行日期计算和操作。

引入依赖

代码语言:javascript
复制
<dependency>  
        <groupId>joda-time</groupId>  
        <artifactId>joda-time</artifactId>  
        <version>2.9.2</version>  
    </dependency>  

1、获取简单日期

代码语言:javascript
复制
		//方法一:取系统点间  
		DateTime dt1 = new DateTime();
	//方法二:通过java.util.Date对象生成  
	DateTime dt2 = new DateTime(new Date());  
	  
	//方法三:指定年月日点分秒生成(参数依次是:年,月,日,时,分,秒,毫秒)  
	DateTime dt3 = new DateTime(2012, 5, 20, 13, 14, 0, 0);  
	  
	//方法四:ISO8601形式生成  
	DateTime dt4 = new DateTime(&#34;2012-05-20&#34;);  
	DateTime dt5 = new DateTime(&#34;2012-05-20T13:14:00&#34;);  
	  
	//只需要年月日的时候  
	LocalDate localDate = new LocalDate(2021, 9, 1);// September 1, 2021 
	  
	//只需要时分秒毫秒的时候  
	LocalTime localTime = new LocalTime(13, 14, 26, 0);// 1:14:26PM  </code></pre></div></div><h4 id="3en6r" name="2%E3%80%81%E8%8E%B7%E5%8F%96%E5%B9%B4%E6%9C%88%E6%97%A5%E7%82%B9%E5%88%86%E7%A7%92"><strong>2、获取年月日点分秒</strong></h4><div class="rno-markdown-code"><div class="rno-markdown-code-toolbar"><div class="rno-markdown-code-toolbar-info"><div class="rno-markdown-code-toolbar-item is-type"><span class="is-m-hidden">代码语言:</span>javascript</div></div><div class="rno-markdown-code-toolbar-opt"><div class="rno-markdown-code-toolbar-copy"><i class="icon-copy"></i><span class="is-m-hidden">复制</span></div></div></div><div class="developer-code-block"><pre class="prism-token token line-numbers language-javascript"><code class="language-javascript" style="margin-left:0">		DateTime dt = new DateTime();  
	//年  
	int year = dt.getYear();  
	//月  
	int month = dt.getMonthOfYear();  
	//日  
	int day = dt.getDayOfMonth();  
	//星期  
	int week = dt.getDayOfWeek();  
	//点  
	int hour = dt.getHourOfDay();  
	//分  
	int min = dt.getMinuteOfHour();  
	//秒  
	int sec = dt.getSecondOfMinute();  
	//毫秒  
	int msec = dt.getMillisOfSecond();  </code></pre></div></div><h4 id="9tkft" name="3%E3%80%81%E6%98%9F%E6%9C%9F%E7%9A%84%E7%89%B9%E6%AE%8A%E5%A4%84%E7%90%86"><strong>3、星期的特殊处理</strong></h4><div class="rno-markdown-code"><div class="rno-markdown-code-toolbar"><div class="rno-markdown-code-toolbar-info"><div class="rno-markdown-code-toolbar-item is-type"><span class="is-m-hidden">代码语言:</span>javascript</div></div><div class="rno-markdown-code-toolbar-opt"><div class="rno-markdown-code-toolbar-copy"><i class="icon-copy"></i><span class="is-m-hidden">复制</span></div></div></div><div class="developer-code-block"><pre class="prism-token token line-numbers language-javascript"><code class="language-javascript" style="margin-left:0">		DateTime dt = new DateTime();  
	  
	//星期  
	switch(dt.getDayOfWeek()) {  
	case DateTimeConstants.SUNDAY:  
	    System.out.println(&#34;星期日&#34;);  
	    break;  
	case DateTimeConstants.MONDAY:  
	    System.out.println(&#34;星期一&#34;);  
	    break;  
	case DateTimeConstants.TUESDAY:  
	    System.out.println(&#34;星期二&#34;);  
	    break;  
	case DateTimeConstants.WEDNESDAY:  
	    System.out.println(&#34;星期三&#34;);  
	    break;  
	case DateTimeConstants.THURSDAY:  
	    System.out.println(&#34;星期四&#34;);  
	    break;  
	case DateTimeConstants.FRIDAY:  
	    System.out.println(&#34;星期五&#34;);  
	    break;  
	case DateTimeConstants.SATURDAY:  
	    System.out.println(&#34;星期六&#34;);  
	    break;  
	}  </code></pre></div></div><h4 id="f722j" name="4%E3%80%81%E4%B8%8EJDK%E6%97%A5%E6%9C%9F%E5%AF%B9%E8%B1%A1%E7%9A%84%E8%BD%AC%E6%8D%A2"><strong>4、与JDK日期对象的转换</strong></h4><div class="rno-markdown-code"><div class="rno-markdown-code-toolbar"><div class="rno-markdown-code-toolbar-info"><div class="rno-markdown-code-toolbar-item is-type"><span class="is-m-hidden">代码语言:</span>javascript</div></div><div class="rno-markdown-code-toolbar-opt"><div class="rno-markdown-code-toolbar-copy"><i class="icon-copy"></i><span class="is-m-hidden">复制</span></div></div></div><div class="developer-code-block"><pre class="prism-token token line-numbers language-javascript"><code class="language-javascript" style="margin-left:0">		DateTime dt = new DateTime();  
	  
	//转换成java.util.Date对象  
	Date d1 = new Date(dt.getMillis());  
	Date d2 = dt.toDate();  
	  
	//转换成java.util.Calendar对象  
	Calendar c1 = Calendar.getInstance();  
	c1.setTimeInMillis(dt.getMillis());  
	Calendar c2 = dt.toCalendar(Locale.getDefault());  </code></pre></div></div><p><strong>5、日期前后推算</strong></p><div class="rno-markdown-code"><div class="rno-markdown-code-toolbar"><div class="rno-markdown-code-toolbar-info"><div class="rno-markdown-code-toolbar-item is-type"><span class="is-m-hidden">代码语言:</span>javascript</div></div><div class="rno-markdown-code-toolbar-opt"><div class="rno-markdown-code-toolbar-copy"><i class="icon-copy"></i><span class="is-m-hidden">复制</span></div></div></div><div class="developer-code-block"><pre class="prism-token token line-numbers language-javascript"><code class="language-javascript" style="margin-left:0">		DateTime dt = new DateTime();  
	  
	     
	//明天  
	DateTime tomorrow = dt.plusDays(1);   
	//昨天  
	DateTime yesterday = dt.minusDays(1);        
	//1个月前  
	DateTime before1month = dt.minusMonths(1);        
	//3个月后  
	DateTime after3month = dt.plusMonths(3);          
	//2年前  
	DateTime before2year = dt.minusYears(2);          
	//5年后  
	DateTime after5year = dt.plusYears(5); </code></pre></div></div><h4 id="cm71o" name="6%E3%80%81%E5%8F%96%E7%89%B9%E6%AE%8A%E6%97%A5%E6%9C%9F"><strong>6、取特殊日期</strong></h4><div class="rno-markdown-code"><div class="rno-markdown-code-toolbar"><div class="rno-markdown-code-toolbar-info"><div class="rno-markdown-code-toolbar-item is-type"><span class="is-m-hidden">代码语言:</span>javascript</div></div><div class="rno-markdown-code-toolbar-opt"><div class="rno-markdown-code-toolbar-copy"><i class="icon-copy"></i><span class="is-m-hidden">复制</span></div></div></div><div class="developer-code-block"><pre class="prism-token token line-numbers language-javascript"><code class="language-javascript" style="margin-left:0">		DateTime dt = new DateTime();     
	  
	//月末日期    
	DateTime lastday = dt.dayOfMonth().withMaximumValue();  
	  
	//90天后那周的周一  
	DateTime firstday = dt.plusDays(90).dayOfWeek().withMinimumValue();  </code></pre></div></div><h4 id="enkes" name="7%E3%80%81%E6%97%B6%E5%8C%BA"><strong>7、时区</strong></h4><div class="rno-markdown-code"><div class="rno-markdown-code-toolbar"><div class="rno-markdown-code-toolbar-info"><div class="rno-markdown-code-toolbar-item is-type"><span class="is-m-hidden">代码语言:</span>javascript</div></div><div class="rno-markdown-code-toolbar-opt"><div class="rno-markdown-code-toolbar-copy"><i class="icon-copy"></i><span class="is-m-hidden">复制</span></div></div></div><div class="developer-code-block"><pre class="prism-token token line-numbers language-javascript"><code class="language-javascript" style="margin-left:0">		//默认设置为日本时间  
	DateTimeZone.setDefault(DateTimeZone.forID(&#34;Asia/Tokyo&#34;));  
	DateTime dt1 = new DateTime();  
	  
	//伦敦时间  
	DateTime dt2 = new DateTime(DateTimeZone.forID(&#34;Europe/London&#34;));</code></pre></div></div><h4 id="4pvub" name="8%E3%80%81%E8%AE%A1%E7%AE%97%E5%8C%BA%E9%97%B4"><strong>8、计算区间</strong></h4><div class="rno-markdown-code"><div class="rno-markdown-code-toolbar"><div class="rno-markdown-code-toolbar-info"><div class="rno-markdown-code-toolbar-item is-type"><span class="is-m-hidden">代码语言:</span>javascript</div></div><div class="rno-markdown-code-toolbar-opt"><div class="rno-markdown-code-toolbar-copy"><i class="icon-copy"></i><span class="is-m-hidden">复制</span></div></div></div><div class="developer-code-block"><pre class="prism-token token line-numbers language-javascript"><code class="language-javascript" style="margin-left:0">		DateTime begin = new DateTime(&#34;2021-01-02&#34;);  
	DateTime end = new DateTime(&#34;2021-01-01&#34;);  
	  
	//计算区间毫秒数  
	Duration d = new Duration(begin, end);  
	long time = d.getMillis();  
	  
	//计算区间天数  
	Period p = new Period(begin, end, PeriodType.days());  
	int days = p.getDays();  
	  
	//计算特定日期是否在该区间内  
	Interval i = new Interval(begin, end);  
	boolean contained = i.contains(new DateTime(&#34;2021-01-01&#34;));  </code></pre></div></div><h4 id="fkm9g" name="9%E3%80%81%E6%97%A5%E6%9C%9F%E6%AF%94%E8%BE%83"><strong>9、日期比较</strong></h4><div class="rno-markdown-code"><div class="rno-markdown-code-toolbar"><div class="rno-markdown-code-toolbar-info"><div class="rno-markdown-code-toolbar-item is-type"><span class="is-m-hidden">代码语言:</span>javascript</div></div><div class="rno-markdown-code-toolbar-opt"><div class="rno-markdown-code-toolbar-copy"><i class="icon-copy"></i><span class="is-m-hidden">复制</span></div></div></div><div class="developer-code-block"><pre class="prism-token token line-numbers language-javascript"><code class="language-javascript" style="margin-left:0">		DateTime d1 = new DateTime(&#34;2021-01-01&#34;);  
	DateTime d2 = new DateTime(&#34;2021-01-01&#34;);  
	  
	//和系统时间比  
	boolean b1 = d1.isAfterNow();  
	boolean b2 = d1.isBeforeNow();  
	boolean b3 = d1.isEqualNow();  
	  
	//和其他日期比  
	boolean f1 = d1.isAfter(d2);  
	boolean f2 = d1.isBefore(d2);  
	boolean f3 = d1.isEqual(d2); </code></pre></div></div><h4 id="evvca" name="10%E3%80%81%E6%A0%BC%E5%BC%8F%E5%8C%96%E8%BE%93%E5%87%BA"><strong>10、格式化输出</strong></h4><div class="rno-markdown-code"><div class="rno-markdown-code-toolbar"><div class="rno-markdown-code-toolbar-info"><div class="rno-markdown-code-toolbar-item is-type"><span class="is-m-hidden">代码语言:</span>javascript</div></div><div class="rno-markdown-code-toolbar-opt"><div class="rno-markdown-code-toolbar-copy"><i class="icon-copy"></i><span class="is-m-hidden">复制</span></div></div></div><div class="developer-code-block"><pre class="prism-token token line-numbers language-javascript"><code class="language-javascript" style="margin-left:0">		DateTime dateTime = new DateTime();  
	  
	String s1 = dateTime.toString(&#34;yyyy/MM/dd hh:mm:ss.SSSa&#34;);  
	String s2 = dateTime.toString(&#34;yyyy-MM-dd HH:mm:ss&#34;);  
	String s3 = dateTime.toString(&#34;EEEE dd MMMM, yyyy HH:mm:ssa&#34;);  
	String s4 = dateTime.toString(&#34;yyyy/MM/dd HH:mm ZZZZ&#34;);  
	String s5 = dateTime.toString(&#34;yyyy/MM/dd HH:mm Z&#34;);  </code></pre></div></div>