Java YearMonth日期类应用
Java YearMonth日期类应用
在项目中会遇到仅需要存取年月,由于数据库一般不支持不完整日期格式,因此日期之间转换比较麻烦。本文通过介绍YearMonth类实现年月日期存取过程。
1. 概述
YearMonth是不可变的日期时间对象,表示年、月的组合。其实现了Comparable接口。
2. YearMonth类方法
YearMonth类主要方法如下表:
方法 | 描述 |
---|---|
String format(DateTimeFormatter formatter) | 使用特定的格式格式化year-month |
int get(TemporalField field) | 返回日期中特定域的int类型 |
boolean isLeapYear() | 是否闰年 |
static YearMonth now() | 根据当前时间返回YearMonth实例 |
static YearMonth of(int year, int month) | 根据年、月返回YearMonth实例 |
YearMonth plus(TemporalAmount amountToAdd) | 返回year-month增加一定数量的拷贝 |
YearMonth minus (TemporalAmount amountToSubtract) | 返回year-month减少一定数量的拷贝 |
3. YearMonth类方法示例
格式化为字符串
YearMonth ym = YearMonth.now();
String s = ym.format(DateTimeFormatter.ofPattern("MM yyyy"));
System.out.println(s);
获取特定域
YearMonth y = YearMonth.now();
long l1 = y.get(ChronoField.YEAR);
System.out.println(l1);
long l2 = y.get(ChronoField.MONTH_OF_YEAR);
System.out.println(l2);
增加月份
YearMonth ym1 = YearMonth.now();
YearMonth ym2 = ym1.plus(Period.ofYears(2));
System.out.println(ym2);
减少月份
YearMonth ym1 = YearMonth.now();
YearMonth ym2 = ym1.minus(Period.ofYears(2));
System.out.println(ym2);
4.实际应用
实际项目需求中每月需要制定计划,计划月份无需精确到日,所有打算使用YearMonth类型。但数据库层不支持YearMonth,只能存储Date类型,需要必要的转换。
4.1. 定义前端请求实体
static final String STD_YEAR_MONTH_PATTERN = "yyyy-MM"@JsonFormat(pattern = STD_YEAR_MONTH_PATTERN, shape = JsonFormat.Shape.STRING)
@DateTimeFormat(pattern = STD_YEAR_MONTH_PATTERN)
YearMonth planMonth;
4.2 定义实体类型
因为实体类型对应数据库,故定义为LocalDate类型。
private LocalDate planMonth;
4.3. 类型转换
/*** 转换YearMonth为LocalDate*/
public static LocalDate parseDateYearMonth(YearMonth yearMonth){return LocalDate.of(yearMonth.getYear(),yearMonth.getMonthValue(),1);
}/*** 转换LocalDate为YearMonth*/
public static YearMonth parseYearMonth(LocalDate localDate){return YearMonth.of(localDate.getYear(),localDate.getMonthValue());
}
自动映射
实际中DTO之间映射通过Orika 框架实现,但REQ类与实体类之间的日期类型不统一,需要手工通过上述方法进行映射,所以需要忽略该字段进行映射。定义映射规则如下:
@Component
public class DtoMapper extends ConfigurableMapper {
@Override
protected void configure(MapperFactory factory) {factory.classMap(ZfjgPlanEntity.class,ZfjgPlanReq.class).exclude("planMonth").byDefault().register();
}
}
总结
本文介绍了YearMonth类及其主要方法。同时也介绍实际项目中如何进行转换和存储。
Java YearMonth日期类应用相关推荐
- Java使用日期类实现打印输出各个年份的日历表
Java使用日期类实现打印输出各个年份的日历表 实现样式: import java.time.LocalDate; import java.util.Scanner;/*** @Author: Say ...
- java当中日期类的相关操作(学习笔记)
一:引言 Calendar类是日历类,提供操作日历字段的方法,其中有常用操作 get 和 set 方法还有 add方法 详细用法请看码 二:上码 package cn.wyj.one;import j ...
- Java Date日期类中的getMonth()与getYear()提示过时警告
Date日期类中的getMonth()与getYear()提示过时警告,这里的警告是方法过时,不建议使用. 解决方法,使用Calendar类,但是这里的获取月份是,会比数据中的月份少1,这里需要进行加 ...
- java时间日期类(Date、DateFormat、Calendar)学习
1.Date类 常用方法:long getTime(),用于返回当前时刻的毫秒值 Date d = new Date(2000); System.out.println(d.getTime());// ...
- Java时间日期类处理(LocalDateTime、LocalDate相关操作、获取周几、工作日休息日节假日判定)
1.LocalDateTime相关操作:(时间推移.计算两个LocalDateTime之间的时间间隔.转LocalDate),代码如下: // 获取LocalDateTime对象String date ...
- java查询日期类的表,JAVA菜鸟入门篇 - 时间处理相关类实例:打印该月日期表 (29)...
利用前面我们所学习有关时间处理类,Date.DateFormat.SimpleDateFormat以及Calendar和GregorianCalendar类 编写一个按照用户定义格式(格式:2015- ...
- java 日期的加减_用java实现日期类的加减
Java代码 public class test1 { public static void main(String[] args) { Calendar c = Calendar.getInstan ...
- day21 java的日期类
1.对日期的处理 1.1获取当前系统时间 1.2日期格式化 1.3字符串转化成Date 1.4计算毫秒数 1.5有参数的构造方法
- 蓝桥杯日期计算java_日期类的使用(java)-蓝桥杯
蓝桥杯日期问题常考,java提供了日期类很方便: //日历类 Calendar c = Calendar.getInstance(); // 获取实例化对象 Date date =c.getTime( ...
最新文章
- ThinkPHP基础概念
- Unity创建2D动作RPG游戏 Create Action 2D RPG Game in Unity
- 关于GUI_DOWNLOAD中下载excel等文档的乱码问题
- tensorflow lstm 预测_图卷积神经网络GCN与递归结构RNN相结合的时间序列预测
- oracle进城有哪些,oracle主要进程详解
- linux crontab日志,crontab的用法---linux定时任务
- dup/dup2函数的用法
- python 找到两个排序数组的中位数_Python查找两个有序列表中位数的方法【基于归并算法】...
- linux禁止内核抢占,Linux内核态抢占机制分析
- SegmentFault D-Day 2015 武汉站回顾
- 创业邦30岁以下青年企业家峰会暨颁奖典礼在京举行
- Python利用Reportlab生成PDF文档
- 当输入条件不符合规范c语言,【图片】【高二会考】选择判断答案大全【郑州12中吧】_百度贴吧...
- Android TextView更换字体
- workerman执行busy,http请求不返回导致阻塞
- 凸优化基础知识—对偶(Duality)
- 音乐专业如何利用计算机思维,利用信息技术培养学生音乐创造思维能力
- 骑马与砍杀服务器连接中断,骑马与砍杀为什么显示无法连接服务器 | 手游网游页游攻略大全...
- 销售人员开发大客户技巧 大客户销售怎样做好
- 打印机驱动下载ts3180 ts3480