🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 🌊 《IDEA开发秘籍专栏》学会IDEA常用操作,工作效率翻倍~💐 🌊 《100天精通Golang(基础入门篇)》学会Golang语言,畅玩云原生,走遍大小厂~💐
🪁🍁 希望本文能够给您带来一定的帮助🌸文章粗浅,敬请批评指正!🍁🐥
Java日期计算常用方法《简述版》
Java中进行日期计算常用的方法包括以下几种,这里提供简要的总结:
- java.util.Date 和 java.util.Calendar:
java.util.Date
类已经过时,不推荐使用。java.util.Calendar
提供了日期和时间的基本操作方法,但使用起来繁琐。
- java.time包(Java 8引入的新时间API):
LocalDate
:处理日期,无时区信息。LocalTime
:处理时间,无日期信息。LocalDateTime
:处理日期和时间。ZonedDateTime
:带有时区信息的日期和时间。Period
:处理日期间隔。Duration
:处理时间间隔。
- 日期计算操作:
- 创建日期对象:使用上述类的静态方法或构造函数创建。
- 增减日期:使用
plus
和minus
方法,传入Period
或Duration
对象。 - 计算两个日期的间隔:使用
ChronoUnit
类的静态方法,例如ChronoUnit.DAYS.between(date1, date2)
。
- 格式化和解析日期:
- 使用
DateTimeFormatter
类进行日期和时间的格式化和解析。
- 使用
- 常用操作:
- 获取当前日期和时间:使用
LocalDate.now()
、LocalTime.now()
、LocalDateTime.now()
。 - 获取特定日期或时间:使用
of
方法,如LocalDate.of(2023, 8, 11)
。 - 判断日期前后:使用
isBefore
、isAfter
等方法进行比较。
- 获取当前日期和时间:使用
总的来说,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("2012-05-20");
DateTime dt5 = new DateTime("2012-05-20T13:14:00");
//只需要年月日的时候
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("星期日");
break;
case DateTimeConstants.MONDAY:
System.out.println("星期一");
break;
case DateTimeConstants.TUESDAY:
System.out.println("星期二");
break;
case DateTimeConstants.WEDNESDAY:
System.out.println("星期三");
break;
case DateTimeConstants.THURSDAY:
System.out.println("星期四");
break;
case DateTimeConstants.FRIDAY:
System.out.println("星期五");
break;
case DateTimeConstants.SATURDAY:
System.out.println("星期六");
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("Asia/Tokyo"));
DateTime dt1 = new DateTime();
//伦敦时间
DateTime dt2 = new DateTime(DateTimeZone.forID("Europe/London"));</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("2021-01-02");
DateTime end = new DateTime("2021-01-01");
//计算区间毫秒数
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("2021-01-01")); </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("2021-01-01");
DateTime d2 = new DateTime("2021-01-01");
//和系统时间比
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("yyyy/MM/dd hh:mm:ss.SSSa");
String s2 = dateTime.toString("yyyy-MM-dd HH:mm:ss");
String s3 = dateTime.toString("EEEE dd MMMM, yyyy HH:mm:ssa");
String s4 = dateTime.toString("yyyy/MM/dd HH:mm ZZZZ");
String s5 = dateTime.toString("yyyy/MM/dd HH:mm Z"); </code></pre></div></div>