@Data注解大小写遇到的坑及时间处理

问题处理

问题背景

  1. 类注解@Data,类中 private Date cTime;
  2. Mapper中
  3. 数据库中 c_time (datetime)

问题描述

返回为 “ctime”: “2023-09-15T06:26:17.000+00:00”

  1. ctime为小写,应该为cTime
  2. 时间格式及时区符合

问题解决

  1. 当属性名子二个字母大写的时候,需要指定@JsonProperty及其value;或者手动getfDate和setfDate;否则将转为小写。另外请注意当属性全为大小字母时候,@Data注解,其中的set/get期望接受到的数据是驼峰命名法,所以它会将数据自动转换成首字母小写的驼峰命名
  2. 属性上添加注解@JsonFormat(pattern = “yyyy-MM-dd HH:mm:ss”, timezone = “GMT+8”)
    或者在application.yml中添加
spring:  项目时间规范,控制整个项目
  jackson:
    date-format: yyyy-MM-dd HH:mm:ss
    time-zone: GMT+8

时间总结

参考其他文章,文末标注

简述
java.util.Date(父类)最基本的时间类
java.sql.Date格式年月日,没有无参构造
java.sql.time时分秒
java.sql.Timestamp年月日时分秒毫秒
java.util.Calendar(日历)可以表示年月日时分秒毫秒
java.text.DateFormat时间可以格式化

java.util.Date的用法实例

用法

Date date = new Date();
//Date date1 = new Date(0L); // 可以传入Long值,表示距离1970年1月1日00:00:00 毫秒值  // 默认当前
System.out.println("[java.util.Date] " + date);            // 默认输出格式
System.out.println("[java]date.Date]--getTime() " + date.getTime());  // 时间戳 距离1970.1.1的毫秒数
System.out.println("[java]date.Date]--toInstant() " + date.toInstant()); // 转化成Instant格式

输出

[java.util.Date] Tue Sep 19 11:33:55 CST 2023
[java]date.Date]--getTime() 1695094435034
[java]date.Date]--toInstant() 2023-09-19T03:33:55.034Z

java.sql.Date的用法实例

用法

// System.currentTimeMillis() 获取的值 和 new java.util.Date的getTime的值是一样的
// 但这个不能保证唯一,如果在短时间内重复获取可能会获得相同的值
Time time = new Time(System.currentTimeMillis()); // 构造函数 传入的Long的值
System.out.println("[java.sql.Time] " + time);   // 时:分:秒
time.setTime(0L); // 重置时间
System.out.println("[java.sql.Time] - setTime(0L) 后 " + time);

输出

[java.sql.Time] 11:35:40
[java.sql.Time] - setTime(0L)08:00:00

java.sql.Timestamp 用法实例

Long systemTime = System.currentTimeMillis();
Timestamp timestamp = new Timestamp(systemTime);
//        timestamp.setTime(0L);   // 这个不解释和之前的一样
System.out.println("[System.currentTimeMillis()] " + systemTime);
System.out.println("[java.sql.Timestamp] " + timestamp);
System.out.println("[java.sql.Timestamp] - getNanos() " + timestamp.getNanos());
System.out.println("[java.sql.Timestamp] - getTime() " + timestamp.getTime());
timestamp.setNanos(892317);  // 设置纳秒级时间
System.out.println("[java.sql.Timestamp] -setNanos(100) 后 " + timestamp);
[System.currentTimeMillis()] 1695094679417
[java.sql.Timestamp] 2023-09-19 11:37:59.417
[java.sql.Timestamp] - getNanos() 417000000
[java.sql.Timestamp] - getTime() 1695094679417
[java.sql.Timestamp] -setNanos(100) 后 2023-09-19 11:37:59.000892317

java.util.Calendar 用法实例

这个不是线程安全的,这个的优势在于我可以获取到相应的年月日时分秒,这个主要通过get方法获取,不过直接用底下的simpleDateFormat,这边做了解

        Calendar calendar = new GregorianCalendar();
        System.out.println("[java.util.Calendar--getTime] " + calendar.getTime());
        System.out.println("[java.util.Calendar--getWeekYear] " + calendar.getWeekYear());
        System.out.println("[java.util.Calendar--getMinimalDaysInFirstWeek ] "  + calendar.getMinimalDaysInFirstWeek());
        System.out.println("[java.util.Calendar--getFirstDayOfWeek ] "  + calendar.getFirstDayOfWeek());
        System.out.println("[java.util.Calendar--getTimeInMillis ] "  + calendar.getTimeInMillis());
        System.out.println("[java.util.Calendar--getWeeksInWeekYear ] "  + calendar.getWeeksInWeekYear());
        System.out.println("[java.util.Calendar--getMinimalDaysInFirstWeek ] "  + calendar.getMinimalDaysInFirstWeek());// 当前时间 2022-09-07
        System.out.println("[java.util.Calendar--calendar.getActualMaximum(Calendar.DATE)] " + calendar.getActualMaximum(Calendar.DATE));
        System.out.println("[java.util.Calendar--calendar.get(Calendar.YEAR)] " + calendar.get(Calendar.YEAR));
        System.out.println("[java.util.Calendar--calendar.get(Calendar.MONTH)] " + calendar.get(Calendar.MONTH));
        System.out.println("[java.util.Calendar--calendar.get(Calendar.DATE)] " + calendar.get(Calendar.DATE));
        System.out.println("[java.util.Calendar--calendar.get(Calendar.DAY_OF_WEEK) " + calendar.get(Calendar.DAY_OF_WEEK));
        System.out.println("[java.util.Calendar--calendar.getMaximum(Calendar.DATE) " + calendar.getMaximum(Calendar.DATE));
[java.util.Calendar--getTime] Tue Sep 19 11:44:11 CST 2023
[java.util.Calendar--getWeekYear] 2023
[java.util.Calendar--getMinimalDaysInFirstWeek ] 1
[java.util.Calendar--getFirstDayOfWeek ] 1
[java.util.Calendar--getTimeInMillis ] 1695095051904
[java.util.Calendar--getWeeksInWeekYear ] 52
[java.util.Calendar--getMinimalDaysInFirstWeek ] 1
[java.util.Calendar--calendar.getActualMaximum(Calendar.DATE)] 30
[java.util.Calendar--calendar.get(Calendar.YEAR)] 2023
[java.util.Calendar--calendar.get(Calendar.MONTH)] 8
[java.util.Calendar--calendar.get(Calendar.DATE)] 19
[java.util.Calendar--calendar.get(Calendar.DAY_OF_WEEK) 3
[java.util.Calendar--calendar.getMaximum(Calendar.DATE) 31

java.text.SimpleDateFormat用法实例

GEra designatorTextAD
yYearYear1996; 96
YWeek yearYear2009; 09
MMonth in year (context sensitive)MonthJuly; Jul; 07
LMonth in year (standalone form)MonthJuly; Jul; 07
wWeek in yearNumber27
WWeek in monthNumber2
DDay in yearNumber189
dDay in monthNumber10
FDay of week in monthNumber2
EDay name in weekTextTuesday; Tue
uDay number of week (1 = Monday, …, 7 = Sunday)Number1
aAm/pm markerTextPM
HHour in day (0-23)Number0
kHour in day (1-24)Number24
KHour in am/pm (0-11)Number0
hHour in am/pm (1-12)Number12
mMinute in hourNumber30
sSecond in minuteNumber55
SMillisecondNumber978
zTime zoneGeneral time zonePacific Standard Time; PST; GMT-08:00
ZTime zoneRFC 822 time zone-0800
XTime zoneISO 8601 time zone-08; -0800; -08:00

其中的类型为:

Text: 对于格式化,如果模式字母的数量是4以上,则使用完整的形式; 否则,如果有的话,使用简短或缩写形式。 对于解析,两种形式都是接受的,与模式字母的数量无关。

SimpleDateFormat sdf = new SimpleDateFormat("E");
SimpleDateFormat sdf1 = new SimpleDateFormat("EE");
SimpleDateFormat sdf2 = new SimpleDateFormat("EEE");
SimpleDateFormat sdf3 = new SimpleDateFormat("EEEE");System.out.println("[java.text.SimpleDateFormat--E] " + sdf.format(new Date()));
System.out.println("[java.text.SimpleDateFormat--EE] " + sdf1.format(new Date()));
System.out.println("[java.text.SimpleDateFormat--EEE] " + sdf2.format(new Date()));
System.out.println("[java.text.SimpleDateFormat--EEEE] " + sdf3.format(new Date()));
[java.text.SimpleDateFormat--E] 星期二
[java.text.SimpleDateFormat--EE] 星期二
[java.text.SimpleDateFormat--EEE] 星期二
[java.text.SimpleDateFormat--EEEE] 星期二

Number: 对于格式化,模式字母的数量是最小位数,而较短的数字将零填充到此数量。 对于解析,模式字母的数量将被忽略,除非需要分隔两个相邻的字段。

SimpleDateFormat sdf4 = new SimpleDateFormat("w");
SimpleDateFormat sdf5 = new SimpleDateFormat("ww");
SimpleDateFormat sdf6 = new SimpleDateFormat("www");
SimpleDateFormat sdf7 = new SimpleDateFormat("wwww");System.out.println("[java.text.SimpleDateFormat--w] " + sdf4.format(new Date()));
System.out.println("[java.text.SimpleDateFormat--ww] " + sdf5.format(new Date()));
System.out.println("[java.text.SimpleDateFormat--www] " + sdf6.format(new Date()));
System.out.println("[java.text.SimpleDateFormat--wwww] " + sdf7.format(new Date()));
[java.text.SimpleDateFormat--w] 38
[java.text.SimpleDateFormat--ww] 38
[java.text.SimpleDateFormat--www] 038
[java.text.SimpleDateFormat--wwww] 0038

Year:对于格式化,如果模式字母数为2,那么年份将被截断为2位数; 否则被解释为Number(不足补0)

 SimpleDateFormat sdf8 = new SimpleDateFormat("y");
SimpleDateFormat sdf9 = new SimpleDateFormat("yy");
SimpleDateFormat sdf10 = new SimpleDateFormat("yyy");
SimpleDateFormat sdf11 = new SimpleDateFormat("yyyy");
SimpleDateFormat sdf12 = new SimpleDateFormat("yyyyy");System.out.println("[java.text.SimpleDateFormat--y] " + sdf8.format(new Date()));
System.out.println("[java.text.SimpleDateFormat--yy] " + sdf9.format(new Date()));
System.out.println("[java.text.SimpleDateFormat--yyy] " + sdf10.format(new Date()));
System.out.println("[java.text.SimpleDateFormat--yyyy] " + sdf11.format(new Date()));
System.out.println("[java.text.SimpleDateFormat--yyyyy] " + sdf12.format(new Date()));
[java.text.SimpleDateFormat--y] 2023
[java.text.SimpleDateFormat--yy] 23
[java.text.SimpleDateFormat--yyy] 2023
[java.text.SimpleDateFormat--yyyy] 2023
[java.text.SimpleDateFormat--yyyyy] 02023

Month: 如果模式字母数为3以上,则该月份被解释为text; 否则,它被解释为number

SimpleDateFormat sdf8 = new SimpleDateFormat("M");
SimpleDateFormat sdf9 = new SimpleDateFormat("MM");
SimpleDateFormat sdf10 = new SimpleDateFormat("MMM");
SimpleDateFormat sdf11 = new SimpleDateFormat("MMMM");
SimpleDateFormat sdf12 = new SimpleDateFormat("MMMMM");System.out.println("[java.text.SimpleDateFormat--M] " + sdf8.format(new Date()));
System.out.println("[java.text.SimpleDateFormat--MM] " + sdf9.format(new Date()));
System.out.println("[java.text.SimpleDateFormat--MMM] " + sdf10.format(new Date()));
System.out.println("[java.text.SimpleDateFormat--MMMM] " + sdf11.format(new Date()));
System.out.println("[java.text.SimpleDateFormat--MMMMM] " + sdf12.format(new Date()));
[java.text.SimpleDateFormat--M] 9
[java.text.SimpleDateFormat--MM] 09
[java.text.SimpleDateFormat--MMM] 九月
[java.text.SimpleDateFormat--MMMM] 九月
[java.text.SimpleDateFormat--MMMMM] 九月

常用方法

SimpleDateFormat sdf13 = new SimpleDateFormat("y-MM-dd");
// 字符串转化为Date, 需要抛出异常
Date date = sdf13.parse("2022-01-02");
System.out.println("[java.text.SimpleDateFormat--parse] " + date.toString());
// Date转化为String
String currentDateString = sdf13.format(new Date());
System.out.println("[java.text.SimpleDateFormat--format] " + currentDateString);

LocalDate,LocalTime,LocalDateTime用法实例

/**
 * 获取当前的日期
 */
LocalDate localDate = LocalDate.now();
System.out.println("[java.time.LocalDate] -- now " + localDate);
LocalTime localTime = LocalTime.now();
System.out.println("[java.time.LocalTime ] -- now " + localTime);
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println("[java.time.LocalDateTime ] -- now " + localDateTime);
/**
 * 获取指定的日期
 */
LocalDate localDate1 = LocalDate.of(2022,9,7);
System.out.println("[java.time.LocalDate] -- of " + localDate1);
LocalTime localTime1 = LocalTime.of(12,53,18);
System.out.println("[java.time.LocalTime] -- of " + localTime1);
LocalDateTime localDateTime1 = LocalDateTime.of(2000, 12,3,12,3,4);
System.out.println("[java.time.LocalDateTime ] -- of " + localDateTime1);
/**
 * get的一些方法
 */
System.out.println("[java.time.LocalDateTime ] -- getYear " + localDate1.getYear());
System.out.println("[java.time.LocalDateTime ] -- getDayOfMonth " + localDate1.getDayOfMonth());
System.out.println("[java.time.LocalDateTime ] -- getMonth " + localDate1.getMonth());
System.out.println("[java.time.LocalDateTime ] -- getMonthValue " + localDate1.getMonthValue());
​
​
​
/**
 * with 就是重新赋值(原LocalDateTime不变)
 * 这边就举一个例
 */
LocalDateTime localDateTime2 = localDateTime1.withYear(2011);
System.out.println("[java.time.LocalDateTime ] --原来 2000年 " + localDateTime1);
System.out.println("[java.time.LocalDateTime ] --原来 2000年  withYear(2011) " + localDateTime2);/**
 * 加 减操作
 * 举一个加的例子
 * minusXXX 这个是减
 */
System.out.println("[java.time.LocalDateTime ] --原来 12月份 " + localDateTime1.getMonthValue());
System.out.println("[java.time.LocalDateTime ] --原来 12月份  plusMonths(1) " + localDateTime1.plusMonths(1).getMonthValue());
[java.time.LocalDate] -- now 2023-09-19
[java.time.LocalTime ] -- now 12:05:05.645
[java.time.LocalDateTime ] -- now 2023-09-19T12:05:05.645
[java.time.LocalDate] -- of 2022-09-07
[java.time.LocalTime] -- of 12:53:18
[java.time.LocalDateTime ] -- of 2000-12-03T12:03:04
[java.time.LocalDateTime ] -- getYear 2022
[java.time.LocalDateTime ] -- getDayOfMonth 7
[java.time.LocalDateTime ] -- getMonth SEPTEMBER
[java.time.LocalDateTime ] -- getMonthValue 9
[java.time.LocalDateTime ] --原来 2000年 2000-12-03T12:03:04
[java.time.LocalDateTime ] --原来 2000年  withYear(2011) 2011-12-03T12:03:04
[java.time.LocalDateTime ] --原来 12月份 12
[java.time.LocalDateTime ] --原来 12月份  plusMonths(1) 1

DateTimeFormatter

 DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
 System.out.println(dateTimeFormatter.format(LocalDateTime.now()));
2023/09/19 12:07:12

时间总结部分为了方便自己查阅,加深印象
时间总结部分作者:SunDuncan
时间总结部分参考链接:https://www.jb51.net/article/262211.htm

  • 13
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值