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日期类应用相关推荐

  1. Java使用日期类实现打印输出各个年份的日历表

    Java使用日期类实现打印输出各个年份的日历表 实现样式: import java.time.LocalDate; import java.util.Scanner;/*** @Author: Say ...

  2. java当中日期类的相关操作(学习笔记)

    一:引言 Calendar类是日历类,提供操作日历字段的方法,其中有常用操作 get 和 set 方法还有 add方法 详细用法请看码 二:上码 package cn.wyj.one;import j ...

  3. Java Date日期类中的getMonth()与getYear()提示过时警告

    Date日期类中的getMonth()与getYear()提示过时警告,这里的警告是方法过时,不建议使用. 解决方法,使用Calendar类,但是这里的获取月份是,会比数据中的月份少1,这里需要进行加 ...

  4. java时间日期类(Date、DateFormat、Calendar)学习

    1.Date类 常用方法:long getTime(),用于返回当前时刻的毫秒值 Date d = new Date(2000); System.out.println(d.getTime());// ...

  5. Java时间日期类处理(LocalDateTime、LocalDate相关操作、获取周几、工作日休息日节假日判定)

    1.LocalDateTime相关操作:(时间推移.计算两个LocalDateTime之间的时间间隔.转LocalDate),代码如下: // 获取LocalDateTime对象String date ...

  6. java查询日期类的表,JAVA菜鸟入门篇 - 时间处理相关类实例:打印该月日期表 (29)...

    利用前面我们所学习有关时间处理类,Date.DateFormat.SimpleDateFormat以及Calendar和GregorianCalendar类 编写一个按照用户定义格式(格式:2015- ...

  7. java 日期的加减_用java实现日期类的加减

    Java代码 public class test1 { public static void main(String[] args) { Calendar c = Calendar.getInstan ...

  8. day21 java的日期类

    1.对日期的处理 1.1获取当前系统时间 1.2日期格式化 1.3字符串转化成Date 1.4计算毫秒数 1.5有参数的构造方法

  9. 蓝桥杯日期计算java_日期类的使用(java)-蓝桥杯

    蓝桥杯日期问题常考,java提供了日期类很方便: //日历类 Calendar c = Calendar.getInstance(); // 获取实例化对象 Date date =c.getTime( ...

最新文章

  1. ThinkPHP基础概念
  2. Unity创建2D动作RPG游戏 Create Action 2D RPG Game in Unity
  3. 关于GUI_DOWNLOAD中下载excel等文档的乱码问题
  4. tensorflow lstm 预测_图卷积神经网络GCN与递归结构RNN相结合的时间序列预测
  5. oracle进城有哪些,oracle主要进程详解
  6. linux crontab日志,crontab的用法---linux定时任务
  7. dup/dup2函数的用法
  8. python 找到两个排序数组的中位数_Python查找两个有序列表中位数的方法【基于归并算法】...
  9. linux禁止内核抢占,Linux内核态抢占机制分析
  10. SegmentFault D-Day 2015 武汉站回顾
  11. 创业邦30岁以下青年企业家峰会暨颁奖典礼在京举行
  12. Python利用Reportlab生成PDF文档
  13. 当输入条件不符合规范c语言,【图片】【高二会考】选择判断答案大全【郑州12中吧】_百度贴吧...
  14. Android TextView更换字体
  15. workerman执行busy,http请求不返回导致阻塞
  16. 凸优化基础知识—对偶(Duality)
  17. 音乐专业如何利用计算机思维,利用信息技术培养学生音乐创造思维能力
  18. 骑马与砍杀服务器连接中断,骑马与砍杀为什么显示无法连接服务器 | 手游网游页游攻略大全...
  19. 销售人员开发大客户技巧 大客户销售怎样做好
  20. 打印机驱动下载ts3180 ts3480

热门文章

  1. Microsoft Office Word已停止工作”解决方法
  2. 查询相册和摄像头的使用权限
  3. power designer 16.5破解(亲测可用,留备)
  4. uniapp input或textarea键盘弹起页面上移
  5. 跟着江南一点雨学习spring(2)
  6. 发现个python好玩的实战项目—色情图片识别
  7. 龙芯1B:串口通信例程
  8. 吴恩达最新采访!以数据为中心的原因
  9. java mail 保存邮件_JavaMail保存为草稿邮件
  10. bootstrapTable通过rowspan/colspan合并单元格