日期时间的推算
几天(年\月\周\日\秒…)前:方法名前缀均为minus…
几天(年\月\周\日\秒…)后:方法名前缀均为plus…
如下示例:
推算5天前的日期: DateTime daysPast = now.minusDays(5);
推算5天后的日期: DateTime daysFuture = now.plusDays(5);
推算5个月前的日期: DateTime monthsPast = now.minusMonths(5);
推算5个月后的日期: DateTime monthsFuture = now.plusMonths(5);
推算日期时间的常用方法:
加 | 减 | 对象类型 | 参数类型 | |
---|---|---|---|---|
年 | .plusYears() | .minusYears() | DateTime | int |
月 | .plusMonths() | .minusMonths() | DateTime | int |
周 | .plusWeeks() | .minusWeeks() | DateTime | int |
日 | .plusDays() | .minusDays() | DateTime | int |
小时 | .plusHours() | .minusHours() | DateTime | int |
分钟 | .plusMinutes() | .minusMinutes() | DateTime | int |
秒 | .plusSeconds() | .minusSeconds() | DateTime | int |
毫秒 | .plusMillis() | .minusMillis() | DateTime | int |
格式转换
将特定格式的字符串解析为DateTime类型的日期时间对象:
DateTime.parse(str, DateTimeFormat.forPattern(pattern));
其中,str
是待解析的字符串,pattern
为待解析的字符串的时间格式
例如:
String dateStr = "2021-11-15 10:20:35";
DateTime date = DateTime.parse(dateStr, DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss"));
这样就成功的将String类型的时间,转为可以直接运算处理的DateTime对象了。
将DateTime对象转为指定格式的日期时间
DateTime nowDate = new DateTime();
//此处.toString()方法内的参数,填写转换后的日期时间格式
String dateStr = nowDate.toString("yyyy-MM-dd");
将DateTime对象转为Date类型
DateTime nowDate = new DateTime();
Date date = nowDate.toDate();
获得常用的特殊时间的方法
获得一年内的第一天、最后一天,或是一小时内的第一分钟、最后一分钟
类似 2021-01-01 00:00:00
和 2021-12-31 23:59:59
先上代码:
DateTime nowDate = new DateTime();
//一年中的第一天,0秒 如: 2021-01-01 00:00:00
String startDate = nowDate.dayOfYear().withMinimumValue().secondOfDay().withMinimumValue().toString("yyyy-MM-dd HH:mm:ss");
//一年中的最后一天,最后一秒 如: 2021-12-31 23:59:59
String endDate = nowDate.dayOfYear().withMaximumValue().secondOfDay().withMaximumValue().toString("yyyy-MM-dd HH:mm:ss");
解释一下:
.dayOfYear()
方法表示指定对一年中的天数进行设置,随后紧跟着的.withMinimumValue()
方法表示取最小值,这样组合起来就构造出了一年中的第一天。
同理,时间的部分取最小值也可以通过.secondOfDay()
、.withMinimumValue()
这俩方法的组合达到对应的效果。
.withMaximumValue()
: 对指定的某个时间范围内(如.secondOfDay()
、.dayOfMonth()
…)取最大值。
设置时间日期属性方法 | 说明 | 直接返回对应的时间日期方法(int) |
---|---|---|
yearOfCentury() | 当前世纪中的年数 | getYearOfCentury() |
year() | 常规年数 | getYear() |
weekyear() | 按周计算的年数 | getWeekyear() |
weekOfWeekyear() | 一年内的周数 | getWeekOfWeekyear() |
monthOfYear() | 一年内的月份 | getMonthOfYear() |
dayOfYear() | 一年内的天 | getDayOfYear() |
dayOfMonth() | 一月内的天数 | getDayOfMonth() |
dayOfWeek() | 一周内的天数 | getDayOfWeek() |
hourOfDay() | 一天内的小时数 | getHourOfDay() |
minuteOfDay() | 一天内的分钟数 | getMinuteOfDay() |
minuteOfHour() | 一小时内的分钟 | getMinuteOfHour() |
secondOfDay() | 一天内的秒数 | getSecondOfDay() |
secondOfMinute() | 一分钟内的秒数 | getSecondOfMinute() |
millisOfDay() | 一天内的毫秒数 | getMillisOfDay() |
millisOfSecond() | 一秒内的毫秒数 | getMillisOfSecond() |
注: 表格中左侧的方法均用于设置时间日期属性,便于处理时间日期,返回值类型为
DateTime.Property
,通常与withMaximumValue()
、withMinimumValue()
、get()
等方法配合使用。
另外需要单独说明的方法是getWeekyear()
和getWeekOfWeekyear()
以及他俩对应的get方法。
getWeekyear()
: 是按周计算的年份。比如2021-01-01日,按常规年份来说是2021年,但是这一天是周五,它所在的那周是从2020-12-28日的周一开始的,所以它所返回的年份是2020。getWeekOfWeekyear()
: 同上。以周一为一周的开始,以每年的第一个周一作为第一周。所以2021-01-01日并不会被当作第一周,而是上一年的53周。