Java获取日期的几种方法和处理,计算当前时间提前以及推迟几小时方法

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一周中的第几天 / 星期
HOUR12小时制的时间
HOUR_OF_DAY24小时制的时间
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);
    }

测试结果图:
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值