JPA——Date拓展之Calendar

Java Calendar 是时间操作类,Calendar 抽象类定义了足够的方法,在某一特定的瞬间或日历上,提供年、月、日、小时之间的转换提供方法

一、获取具体时间信息

1. 当前时间

获取此刻时间的年月日时分秒

Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH) + 1;
int day = calendar.get(Calendar.DATE);
System.out.println(year + "年" + month + "月" + day + "日");
//输出时间2023年2月28日
2. 指定时间

使用自定义时间或者某个请求中的时间
a)使用date类

//查看源码可以发现,year= year + 1900,month = month + 1
Date date = new Date(123, 1, 28,14,28,0);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH) + 1;
int day = calendar.get(Calendar.DATE);
System.out.println(year + "年" + month + "月" + day + "日");
//输出时间2023年2月28日

b)使用calendar类

Calendar calendar = Calendar.getInstance();
calendar.set(2023,2,28,14,36,0);
int year = calendar.get(Calendar.YEAR);
//这里指定了月份,所以不需要+1
int month = calendar.get(Calendar.MONTH);
int day = calendar.get(Calendar.DATE);
System.out.println(year + "年" + month + "月" + day + "日");
//输出时间2023年2月28日

二、指定偏移量时间

可以指定出任意一段时间

//当前时间2023-2-28
Calendar calendar = Calendar.getInstance();
//3年前
calendar.add(Calendar.YEAR, -3);
//2月后
calendar.add(Calendar.MONTH, +2);
//7天后(默认每个月30天)
calendar.add(Calendar.DAY_OF_YEAR, 7);
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int day = calendar.get(Calendar.DATE);
System.out.println(year + "年" + month + "月" + day + "日");
//输出时间2020年4月5日

三、时区使用

可以设置时区

Calendar calendar = Calendar.getInstance();
//表示东一区
TimeZone timeZone = TimeZone.getTimeZone("GMT+1");
calendar.setTimeZone(timeZone);
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH) + 1;
int day = calendar.get(Calendar.DATE);
int hour = calendar.get(Calendar.HOUR_OF_DAY);
System.out.println(year + "年" + month + "月" + day + "日" + hour + "时");
//输出时间2023年2月28日7时(当前时间2023年2月28日14时)

//表示西一区
TimeZone timeZone = TimeZone.getTimeZone("GMT-1");
//输出时间2023年2月28日5时(当前时间2023年2月28日14时)

//互联网时间
TimeZone timeZone = TimeZone.getTimeZone("GMT");
//输出时间2023年2月28日6时(当前时间2023年2月28日14时)

四、Calendar类中的静态常量

常量描述
Calendar.YEAR年份
Calendar.MONTH月份
Calendar.DATE当前时间为多少号(日历式的多少号)
Calendar.HOUR小时(12小时制)
Calendar.HOUR_OF_DAY小时(24小时制)
Calendar.MINUTE分钟数
Calendar.SECOND秒数
Calendar.MILLENSECOND毫秒数
Calendar.WEEK_OF_MONTH当前时间是所在月的第几个星期(日历式的第几周)
Calendar.WEEK_OF_YEAR当前时间是所在当前年的第几个星期
Calendar.DAY_OF_WEEK_IN_MONTH当前时间是所在月的第几个星期,以月份天数为标准,一个月的1号为第一周,8号为第二周
Calendar.DAY_OF_WEEK一周七天中,当前时间是一周中的第几天(星期天为第一天)
Calendar.DAY_OF_YEAR一年中的第几天
Calendar.DAY_OF_MONTH一个月中的第几天,结果等同于Calendar.DATE
Calendar.AM_PM上午还是下午(0表示上午,1表示下午)

五、Calendar类中的常用方法

方法描述
Calendar getInstance获得一个日历对象(重要)
Date getTime返回当前时间
long getTimeInMillis返回当前时间毫秒值
void setTimeInMillis(long millis)用毫秒值设置Calendar的时间
int get(int field)获得给定时间域的值(如:Calendar.DATE)
void set(int field, int value)用给定的值设置时间域
void clear()清除所有的时间域
void clear(int field)清除指定时间域的值
set(int year, int month,int date,int hour,int minute,int second)设置年、月、日、时、分、秒域的数值
void complete()填充时间域列表中所有未设置的域
boolean equals(Object obj)比较该日历和指定的对象
boolean before(Object when)比较时间域大小
boolean after(Object when)比较时间域大小
void add(int field,int amount)将指定 ( 带符号的 ) 数量的时间添加到给定的时间域
void roll(int field,boolean up)在给定的时间域上 ( 向上true / 向下false ) 滚动一个时间单元
void setTimeZone(TimeZone value)用给定的时区值设置时区
TimeZone getTimeZone()获得当前时区
void setMinimalDaysInFirstWeek(int value)设置该年中第一个星期所需要的最少的天数。例如,如果定义第一个星期包含一年第一个月的第一天,用值 1 调用该方法。如果它必须是一个完整的星期,使用 7 调用该方法
int getMinimalDaysInFirstWeek()原理同上
int getMinimum(int field)获得给定时间域最小值,如对于DAY_OF_MONTH最小值为1(1号)
int getMaximum(int field)获得给定时间域最大值,如对于DAY_OF_MONTH最小值为31(31号)
String toString()返回日历的字符串表示

六、Calendar转化为Date

Calendar calendar = Calendar.getInstance();
Date date = calendar.getTime();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
System.out.println(dateFormat.format(date));

注意项: \color{red}{注意项:} 注意项:
month 是从0开始的,也就是全年月份是0 ~ 11;
DAY_OF_WEEK 是从星期天开始的,也就是星期一是2,星期二是3。。。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

若博豆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值