1 Calendar类
1.1 使用calendar类代码
@Test
public void TimeCalendar() {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
//(1)获取当前日历时间
Date now = new Date();
//(2)根据时间获取指定的时间格式
String startTime = sdf.format(now);
System.out.println("现在时间:" + startTime);
Calendar calendar = Calendar.getInstance();
//(3)计算推前n小时的时间,3为推前3小时
calendar.set(Calendar.HOUR_OF_DAY, calendar.get(Calendar.HOUR_OF_DAY) - 3);
String endTime = sdf.format(calendar.getTime());
System.out.println("提前3小时:" + endTime);
//(3)计算推迟n小时的时间
Calendar calendar2 = Calendar.getInstance();
calendar2.set(Calendar.HOUR_OF_DAY, calendar2.get(Calendar.HOUR_OF_DAY) + 3);
String endTime2 = sdf.format(calendar2.getTime());
System.out.println("推迟3小时:" + endTime2);
}
测试结果图:
1.2 涉及到的api
1、SimpleDateFormat --java日期格式化,字符串转日期,日期转字符串。
日期和时间模式(注意大小写,代表的含义是不同的)
yyyy:年
MM:月
dd:日
hh:1~12小时制(1-12)
HH:24小时制(0-23)
mm:分
ss:秒
S:毫秒
E:星期几
D:一年中的第几天
F:一月中的第几个星期(会把这个月总共过的天数除以7)
w:一年中的第几个星期
W:一月中的第几星期(会根据实际情况来算)
a:上下午标识
k:和HH差不多,表示一天24小时制(1-24)。
K:和hh差不多,表示一天12小时制(0-11)。
z:表示时区
日期和时间模式 是按我们常用的年月日时分秒来放的,下面传个别人的专业的图,供参考。
定义了以下模式字母(所有其他字符 ‘A’ 到 ‘Z’ 和 ‘a’ 到 ‘z’ 都被保留):
2、Calendar类(日历类) 它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。以下是Calendar的常用属性。
属性 | 作用 |
---|---|
YEAR | 年份 |
MONTH | 月份 |
DATE | 同DAY_OF_MONTH,日期 |
DAY_OF_MONTH | 同DATE,日期 |
DAY_OF_YEAR | 这一天是这一年中的第几天 |
DAY_OF_WEEK_IN_MONTH | 当前月中的第几周 |
DAY_OF_WEEK | 一周中的第几天 / 星期 |
HOUR | 12小时制的时间 |
HOUR_OF_DAY | 24小时制的时间 |
MINUTE | 分钟数 |
SECOND | 秒数 |
MILLISECOND | 毫秒 |
3、Calendar类的常用方法
属性 | 作用 |
---|---|
public static Calendar getInstance(TimeZone zone,Locale aLocale) | 获得一个日历对象 |
public int get(int field) | 传入field字段获得给定日历字段的值 |
public final void set(int year,int month,int date,int hourOfDay,int minute,int second) | 设置日历对象代表的时间 |
public final void setTime(Date date) | 使用给定的 Date 设置此 Calendar 的时间。 |
public void setTimeInMillis(long millis) | 用给定的 long 值设置此 Calendar 的当前时间值。 |
public final Date getTime() | 返回一个表示此 Calendar 时间值(从历元至现在的毫秒偏移量)的 Date 对象。 |
public long getTimeInMillis() | 返回此 Calendar 的时间值,以毫秒为单位。 |
public int getActualMaximum(int field) | 传入Calendar.Date,得到这个月可能有多少天 |
2 JDK8的接口 DateTimeFormatter
2.1 使用JDK8接口代码
@Test
public void jdk8APITest(){
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
//(1)获取当前时间
LocalDateTime date = LocalDateTime.now();
System.out.println(dateTimeFormatter.format(date));
//(2)获取当前时间的10小时前
LocalDateTime localDateTime = date.minusHours(10);
System.out.println(dateTimeFormatter.format(localDateTime));
//(3)获取当前时间的10小时后
localDateTime = date.plusHours(10);
System.out.println(dateTimeFormatter.format(localDateTime));
}
测试结果图:
3 JWT令牌测试练习
原因是我在学习jwt令牌时,需要设置一个签发时间还有过期时间,所以查了一下java使用日期的几种方法,在此记录jwt测试代码。
@Test
public void JwtTime(String[] args) {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY,calendar.get(Calendar.HOUR_OF_DAY)+3);
//向后推迟三小时
Date time = calendar.getTime();
//加密
JwtBuilder jwtBuilder = Jwts.builder()
.setId("66")//设置令牌id
.setSubject("kuailedexiaofeizhu")//设置主题
.setIssuedAt(new Date()) //签发时间
.setExpiration(time) //过期时间
.claim("name", "Shizhen")
.claim("age", 23) //自定义信息放进Jwt
.signWith(SignatureAlgorithm.HS256, "TYTSz");
String compact = jwtBuilder.compact();
System.out.println(compact);
//解密
Claims tytSz = Jwts.parser().setSigningKey("TYTSz1").parseClaimsJws(compact).getBody();
System.out.println(tytSz);
}
测试结果图: