日期和时间
从JDK 1.1开始, 不推荐使用Date中的相应方法,推荐使用Calendar类和DateFormat类
Calendar类应该用于在日期和时间字段之间进行转换DateFormat类应该用于格式化和解析日期字符串,SimpleDateFormat为该类的继承类
Calendar
用于在日期和时间字段之间进行转换
//Calendar的getInstance方法返回一个Calendar对象,其日历字段已使用当前日期和时间初始化:
//获取系统的当前日历对象
Calendar calendar = Calendar.getInstance();
//1、获取今天是周几,从星期天开始新的一周,即获取星期几为该数字-1
int weekDay = calendar.get(Calendar.DAY_OF_WEEK);
//2、获取系统当前年
int year = calendar.get(Calendar.YEAR);
//3、获取系统当前月,从0开始计算,January-一月为0
int month = calendar.get(Calendar.MONTH);
//4、获取系统当前日,几号
int day = calendar.get(Calendar.DATE);
//5、获取上午跟下午,0-AM,1-PM
int am_pm = calendar.get(Calendar.AM_PM);
//------------Calendar和Date转换------------
//获取Date
Date now = calendar.getTime();
//Date类转换为Calendar类
calendar.setTime(now);
calendar.set(Calendar.YEAR, 2800);
//------------Calendar日期计算以及判断------------
//是否在某个时间(calendar2)之后
System.out.println(calendar.after(calendar2));
//是否在某个时间(calendar2)之前
System.out.println(calendar.before(calendar2));
//增加多少年年,月日以及时分秒同理
calendar.add(Calendar.YEAR, -10);
SimpleDateFormat
用于格式化和解析日期字符串
//6、获取当前的系统时间[date-->String]的过程
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
//将Date类转换为String
Date time = new Date();//获取的是当前系统的时间
String showTime = simpleDateFormat.format(time);
//7、将String类转换为Date
String strTime = "2021-07-07";
Date date = simpleDateFormat.parse(strTime);
//Calendar转换为SimpleDateFormat类
simpleDateFormat.setCalendar(Calendar.getInstance());
//SimpleDateFormat转换为Calendar类
simpleDateFormat.getCalendar();
//SimpleDateFormat类的setLenient方法是将输入的日期格式转化为标准日期
simpleDateFormat.setLenient(false);
通过
SimpleDateFormat类解析字符串和Date对象时,该对象内部就存储数据。
日期格式
使用方式
//23-03-15 01:28:07 下午 周三
SimpleDateFormat sdf2 = new SimpleDateFormat("yy-MM-dd hh:mm:ss a E");
//2023-3月-015 001:028:007 下午 周三
SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss a E");
字母含义
| 字母 | 含义 | 说明 |
|---|---|---|
| y或Y | 年 | 不分大小写,“y” , “yyy” , “yyyy” 匹配的都是4位完整的年,“yy” 匹配的是年的后两位 |
| M | 月 | 只能为大写,“M"和"MM"对应数字,“MMM” 对应 “3月” “MMMM” 对应 “三月”,超过四位一直都显示"三月” |
| d | 日 | 区分大小写,d表示月中第几天,即几号,而D为年的第几天 |
| h或H | 时 | 区分大小写,大写为24进制计时,小写为12进制计时 |
| m | 分 | 只能为小写,为了避免和月混淆 |
| s或S | 秒或毫秒 | 区分大小写,小写以秒为单位,大写以毫秒为单位 |
| a | Am/pm 标记 | 如果是上午就对应 “AM” , 如果是下午就对应 “PM” |
| E | 星期几 | 只能为大写,“E” , “EE” , “EEE” 都对应 “Sun”,“EEEE” 对应 “Sunday” , 超出4位 , 仍然对应 “Sunday” |
| G | 年代标志符 | |
| z或Z | 时区 | 区分大小写,z为General格林时区,Z为RFC 822时区 |
| w或W | 第几周 | 区分大小写,w为年的第几周,W为月的第几周 |
| f或F | 第几星期 | 区分大小写,f为年的第几星期,F为月的第几星期 |
| k或K | 第几小时 | 区分大小写,k为在一天中 (1~24)的小时数,K为在上午或下午 (0~11)中的小时数 |
年、日、时、分、秒除了特定格式外都符合:格式化为出现次数位,如果无法全部显示则自动拓展,否则前面填充0。
月、星期,由于具有特殊的常量名,因此超过四位不变其中的分隔符"-"可以替换成其他非字母的任意字符(也可以是汉字)
常用方法
1、判断是否为闰年
闰年:凡公历中有闰日(2月29日)的年份,阴阳历中有闰月的年份。
1582年以来公历的置闰规则(一般只考虑这个):
- 普通闰年:公历年份是4的倍数,且不是100的倍数的,为闰年(如2004年、2020年等就是闰年)。
- 世纪闰年:公历年份是整百数的,必须是400的倍数才是闰年(如1900年不是闰年,2000年是闰年)。
1582年以前的惯例:
- 四年一闰;如果公元A年的A(正数)能被4整除,那么它就是闰年;如果公元前B年的B(正数)除以4余1,那么它也是闰年。
// 判断闰年
static int judge(int year) {
if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) {
return 1;
}
return 0;
}
2、获取每个月的天数
口诀:一月大、二月小、三月大、四月小、五月大、六月小、七月大、八月大、九月小、十月大、十一月小、十二月大
大月含有31天,小月含有30天,二月比较特殊,28天(闰年 29天)
// 获取每个月的天数
static int[] m = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
static int getDays(int year, int month) {
if (month == 2) {
return 28 + judge(year);
}
return m[month];
}
6089

被折叠的 条评论
为什么被折叠?



