Date和Calendar
Date和Calendar
Calendar比Date拥有更加高级的操作, 底层源码比Date更加复杂
Date (类)
Date
java.uril.Date
java提供的日期的工具类, 在JDK1.0中,Date类是唯一的一个代表时间的类,但是由于Date类不便于实现国际化,所以从JDK1.1版本开始,推荐使用Calendar类进行时间和日期处理
构造方法
常用无参构造进行创建对象 , 例如: Date date = new Date();
常见方法
对于日期的年月日, 时分秒 进行操作, 其中 带删除线的是已过时
返回值 | 方法 | 说明 |
---|---|---|
int | 获取从1900到现在多少年了 | |
int | 获取今天是一个月中的第几天 | |
int | 获取今天是一周中的第几天 | |
int | 获取现在几点了(小时) | |
int | 获取现在是多少分 | |
int | 获取现在是当前月份-1(源码中月份是从0~11) | |
int | 获现在取多少秒 | |
int | getTime() | 获取1970年1月1日0点到现在的毫秒值 |
String | 输出例如: 2020-5-16 11:50:18 格式的日期时间 |
Calendar类 (抽象类)
Calendar
java.util.Calendar
Calendar(日历类) 是一个抽象类, 从JDK1.1版本开始,在处理日期和时间时,系统推荐使用Calendar类进行实现。在设计上,Calendar类的功能要比Date类强大很多,而且在实现方式上也比Date类要复杂一些.
Calendar对象创建方式
Calendar cal = Calendar.getInstance();
输出cal
会得到, 里面包含了好多信息, 比如年月日,时区等
java.util.GregorianCalendar[time=1589690832737,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=29,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2020,MONTH=4,WEEK_OF_YEAR=21,WEEK_OF_MONTH=4,DAY_OF_MONTH=17,DAY_OF_YEAR=138,DAY_OF_WEEK=1,DAY_OF_WEEK_IN_MONTH=3,AM_PM=1,HOUR=0,HOUR_OF_DAY=12,MINUTE=47,SECOND=12,MILLISECOND=737,ZONE_OFFSET=28800000,DST_OFFSET=0]
常用方法
返回值 | 方法 | 说明 |
---|---|---|
int | get(int fieId) | 参数fieId是Calendar里的静态属性,见fieId 常用的静态属性, 可以获取年, 月, 日等信息 |
Date | getTime() | 可以把Calendar转为Date对象 |
void | set(int field, int value) | 设置年月日, 时分秒等值 |
void | setTime(Date date) | 把一个Date对象转为Calendar, |
fieId 常用的静态属性
这些 属性都是静态属性,
属性 | 说明 |
---|---|
YEAR | 年, (四位数) |
MONTH | 月,(0~11), 实际获取的是当前月份-1 |
DAY_OF_MONTH | 日,当月的第几天(几号) |
DAY_OF_WEEK | 周, 当前周的第几天 (周日为1, 周一为2, 依此类推, 最大为7) |
HOUR_OF_DAY | 时, 一天中的第几个小时(最大24) |
MINUTE | 分 |
SECOND | 秒 |
MILLISECOND | 毫秒 |
12个月单词全大写 | 分别代表12个月份 (0~11) |
用法实例:
main方法中代码如下:
Calendar cal = Calendar.getInstance(); // 获取Calendar对象
System.out.println(cal.get(Calendar.YEAR));// 年
System.out.println(cal.get(Calendar.MONTH));// 月(当前月份-1)
System.out.println(cal.get(Calendar.DAY_OF_MONTH));// 日
System.out.println(cal.get(Calendar.DAY_OF_WEEK)); // 周
System.out.println(cal.get(Calendar.HOUR_OF_DAY)); // 时
System.out.println(cal.get(Calendar.MINUTE)); // 分
System.out.println(cal.get(Calendar.SECOND)); // 秒
System.out.println(cal.get(Calendar.MILLISECOND)); // 毫秒
cal.set(Calendar.YEAR, 2018);// 设置年
cal.set(Calendar.MONTH, Calendar.FEBRUARY); // 设置月
cal.set(Calendar.DAY_OF_MONTH, 15); // 设置日
cal.set(Calendar.HOUR_OF_DAY, 23); // 设置小时
cal.set(Calendar.MINUTE, 59); // 设置分
cal.set(Calendar.SECOND, 59); // 设置秒
System.out.println(cal.getTime()); // 转为Date类型显示
扩展: LocalDateTime
LocalDateTime
是JDK8的新的API, 对比Calendar
来说, 线程更安全. 详细使用可参考开发文档API