目录
3.2.1、int get(int field) 用于获取日历字段的值,返回值是int类型
3.2.2、void set(int field, int value) 将给定的日历字段设置为指定的值
3.2.3、void add(int field, int amount) 可以对指定的一个日历字段进行整数的偏移
1、Date
java.util 包提供了 Date 类来封装当前的日期和时间。
1.1、Date( )
构造函数使用当前日期和时间来初始化对象
1.2、Date(long millisec)
构造函数接收一个参数,该参数是从 1970 年 1 月 1 日 0时0分0秒起的毫秒数
1.3、boolean after(Date date)
若当调用此方法的Date对象在指定日期之后返回true,否则返回false。
1.4、boolean before(Date date)
若当调用此方法的Date对象在指定日期之前返回true,否则返回false。
1.5、int compareTo(Date date)
比较当调用此方法的Date对象和指定日期。两者相等时候返回0。调用对象在指定日期之前则返回负数。调用对象在指定日期之后则返回正数。
1.6、long getTime( )
返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。
2、SimpleDateFormat
继承关系:
Java.lang.Object |
+----java.text.Format |
+----java.text.DateFormat |
+----java.text.SimpleDateFormat
2.1、format格式化
SimpleDateFormat format1 = new SimpleDateFormat("yyyy/MM/dd HH:mm E");
SimpleDateFormat format2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
SimpleDateFormat format3 = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒 E ");
SimpleDateFormat format4 = new SimpleDateFormat(
"一年中的第 D 天 ,第w个星期 ,一个月中第W个星期 ,k时 z时区");
Date now=new Date();
System.out.println(format1.format(now));
System.out.println(format2.format(now));
System.out.println(format3.format(now));
System.out.println(format4.format(now));
1):2022/10/12 14:28 星期三
2):2022-10-12 14:28:47
3):2022年10月12日 14时28分47秒 星期三
4):一年中的第 285 天 ,第42个星期 ,一个月中第3个星期 ,14时 CST时区
2.2、parse解析,String转Date
注:解析存在解析异常,需要抛出ParseException,即dateStr格式必须和format5格式一致
public static void main(String[] args) throws ParseException {
String dateStr = "2022-10-12 14:39:39";
SimpleDateFormat format5 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(format5.parse(dateStr));
}
console:Wed Oct 12 14:39:39 CST 2022
3、Calendar
3.1、Calendar类常量
Calendar.YEAR | 表示年份 |
Calendar.MONTH | 表示月份,需要加1,因为0表示1月,1表示2月 |
Calendar.HOUR | 小时(12小时制) |
Calendar.HOUR_OF_DAY | 一天中第几个小时(24小时制) |
Calendar.MINUTE | 分钟 |
Calendar.SECOND | 秒 |
Calendar.DAY_OF_YEAR | 一年中第几天 |
DAY_OF_MONTH Calendar.DATE | 一月中第几天 |
DAY_OF_WEEK | 一周中第几天,注意,周日是1,周一是2 |
Calendar.WEEK_OF_YEAR | 一年中的星期数,即本年中第几个星期 |
3.2、常用API
3.2.1、int get(int field) 用于获取日历字段的值,返回值是int类型
Date date = new Date();
Calendar cal = Calendar.getInstance();
cal.setTime(date);
//2022-11-08 17:04:30
System.out.println(cal.get(Calendar.YEAR));//1-返回年份=2022
System.out.println(cal.get(Calendar.MONTH) + 1);//2-返回月份=11
System.out.println(cal.get(Calendar.HOUR_OF_DAY));//3-返回一天中第几个小时=17
System.out.println(cal.get(Calendar.MINUTE));//4-返回分钟=4
System.out.println(cal.get(Calendar.DAY_OF_YEAR));//5-返回一年中第几天=312
3.2.2、void set(int field, int value) 将给定的日历字段设置为指定的值
Date date = new Date();
Calendar cal = Calendar.getInstance();
cal.setTime(date);
//2022-11-08 17:04:30
cal.set(Calendar.YEAR,1992);//设置年份为1992
System.out.println(cal.get(Calendar.YEAR));//返回设置后的年份 = 1992
3.2.3、void add(int field, int amount) 可以对指定的一个日历字段进行整数的偏移
//2022-11-08 17:20:34
Date date = new Date();
Calendar cal = Calendar.getInstance();
cal.setTime(date);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
cal.setTime(date);
cal.add(Calendar.YEAR,10);//1-当前年份加10年
System.out.println(sdf.format(cal.getTime()));//返回结果:2032-11-08 17:20:34
cal.setTime(date);
cal.add(Calendar.MONTH,10);//2-当前月份加10月
System.out.println(sdf.format(cal.getTime()));//返回结果:2023-09-08 17:20:34
cal.setTime(date);
cal.add(Calendar.HOUR_OF_DAY,10);//3-当前小时加10
System.out.println(sdf.format(cal.getTime()));//返回结果:2022-11-09 03:20:34
cal.setTime(date);
cal.add(Calendar.MINUTE,10);//4-当前分钟加10
System.out.println(sdf.format(cal.getTime()));//返回结果:2022-11-08 17:30:34
cal.setTime(date);
cal.add(Calendar.SECOND,10);//5-当前秒加10
System.out.println(sdf.format(cal.getTime()));//返回结果:2022-11-08 17:20:44
4、易错集锦
问题 | 分析 |
1、Java new Date() Mysql落库之后多了一秒 | Java new Date()生成的是时间戳 Mysql 表中时间字段设置的是datetime类型 而datetime类型是会对毫秒四舍五入的 timestamp(时间戳)类型可以避免该问题 |
2、Mysql date相关类型 | 1)date :now() = 2023-05-05 2)time :now() = 10:45:45 3)datetime:now() = 2023-05-05 10:45:45 4)timestamp =》TIMESTAMP时间范围比DATETIME要小很多 =》“1970-01-01 00:00:01”到“2038-01-19 03:14:07”之间 =》UTC表示世界统一时间,也叫作世界标准时间; =》TIMESTAMP类型最大优点就是可以带有时区属性,因为他的本质就是从毫秒转换而来的,如果你的需求是需要对应不同的国家时区,那么这个类型是个不错的选择 =》TIMESTAMP的标准格式为:YY-MM-DD HH:MM:SS =》推荐日期类型使用DATETIME,而不是TIMESTAMP |