文章目录
Java API
包含Date类简介、Date类常用方法(getTime、setTime)、SimpleDateFormat类及常用的方法(format、parse)、Calendar类简介、Calendar类常用方法(getTime、setTime、get、set、add、getActualMaximum)。
一、Date类
1、Date类简介
1)java.util.Date类用于封装日期及时间信息
2)Date的每一个实例用于表示一个确切的时间点
3)内部维护了一个long值,该值记录的是从:1970年1月1日00:00:00到当前的时间之间所经历的毫秒值
4)正数是70年以后的日期,负数是70年之前的日期
5)由于Date设计存在缺陷(时区,千年虫),所以它的大部分方法被设置为“过时的”,不再建议使用
2、Date类常用方法
1)使用默认构造方法创建的Date表示当前系统日期及时间信息
Date now = new Date();
2)Date重写了toString,返回的字符串显示的就是当前Date表示的时间。格式:Mon May 02 22:25:34 GMT+08:00 2022
System.out.println(now); //Mon May 02 23:05:00 GMT+08:00 2022
(1)、getTime
long getTime()方法用户获取对应的毫秒数,即1970年1月1日到此时此刻经历的毫秒
Date now = new Date();
System.out.println(now.getTime()); //1651931455737
(2)、setTime
void setTime(long)方法通过毫秒数设置时间
public class Test {
public static void main(String[] ages){
Date now = new Date();
System.out.println(now.getTime()); //1651931455737
long time = now.getTime()+1000*24*60*60;
now.setTime(time);
System.out.println(now); //Sun May 08 21:59:55 GMT+08:00 2022
}
}
二、SimpleDateFormat类
java.text.SimpleDateFormat类,根据一个给定的日期格式将String与Date相互转换
SimpleDateFormat(String pattern)
pattern参数用于说明给定的日期格式
1、日期格式
常用的日期格式
字符 | 含义 | 示例 |
---|---|---|
y | 年 | yyyy年——2022年;yy年——22年 |
M | 月 | MM月——01月;M月——1月 |
d | 日 | dd日——06日;d日——6日 |
E | 星期 | E——星期日(Sun) |
a | AM或PM标识 | a——下午(PM) |
H | 小时(24小时制) | HH时——24时 |
h | 小时(12小时制) | a h时——下午 12时 |
m | 分钟 | HH:mm:ss——12:22:22 |
s | 秒 | hh(a):mm:ss——12(下午):22:22 |
2、SimpleDateFormat类常用方法
(1)、format
String format(Date date)方法可以将给定的date对象所表示的时间按照SimpleDateFormat指定的日期格式转换为字符串
public class Test {
public static void main(String[] ages){
Date now = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String str = sdf.format(now);
System.out.println(str); //2022-05-07 22:08:27
}
}
(2)、parse
Date parse(String str)将给定的字符串按照SimpleDateFormat指定的日期格式解析为一个Date对象
public class Test {
public static void main(String[] ages) throws ParseException {
String str = "2008-04-22 20:12:22";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date = sdf.parse(str); //parse方法需要异常处理
System.out.println(date); //Tue Apr 22 00:00:00 GMT+08:00 2008
}
}
如果字符串的格式与指定的日期格式不匹配,parse方法将抛出异常:java.text.ParseException
三、Calendar类
1、Calendar类简介
1)java.util.Calendar 日历类,用于封装日历信息
2)该类是一个抽象类,封装了对时间的相关操作,具体子类针对不同国家的日历系统
3)常用的实现类是GregorianCalendar格里高里历(阳历)
4)使用日历类是为了对时间进行相关的操作。比如计算时间
2、Calendar类常用方法
1)使用Calendar的静态方法getInstance创建实例对象,该方法会根据当前系统是在地区创建一个相应的实现
2)通常是GregorianCalendar(阳历),默认创建的日历实例表示当前系统时间
Calendar calendar = Calendar.getInstance();
(1)、getTime
Date getTime()方法返回一个Date对象,该对象表示的时间是当前Calendar表示的时间
Calendar calendar = Calendar.getInstance();
Date date = calendar.getTime();
System.out.println(date); //Sun May 08 07:37:47 GMT+08:00 2022
(2)、setTime
void setTime(Date date)方法可以使当前Calendar表示给定的Date所表示的时间
calendar.setTime(date);
System.out.println(date); //Sun May 08 07:37:47 GMT+08:00 2022
(3)、get
1)int get(int field)方法获取对应时间分量的值
2)时间分量可以是:Calendar.YEAR、Calendar.MONTH、Calendar.DATE、Calendar.DAY_OF_WEEK、Calendar.HOUR_OF_DAY、Calendar.MINUTE、Calendar.SECOND…
public class Test {
public static void main(String[] ages) throws ParseException {
Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR); //获取年
int month = calendar.get(Calendar.MONTH)+1; //获取月,月从0开始,所以需要加1
int day = calendar.get(Calendar.DATE); //获取日
int hour = calendar.get(Calendar.HOUR_OF_DAY); //获取小时
int minute = calendar.get(Calendar.MINUTE); //获取分钟
int second = calendar.get(Calendar.SECOND); //获取秒数
System.out.println(year+"-"+month+"-"+day+" "+hour+":"+minute+":"+second);
int week = calendar.get(Calendar.DAY_OF_WEEK); //在美国,每周的第一天为星期日
System.out.println("星期"+(week==1?7:week-1)); //判断week是否等于1,等于1返回周的第一天(星期7),否则返回week-1
String[] str = new String[]{"日","一","二","三","四","五","六"};
System.out.println("星期"+str[week-1]);
}
}
(4)、set
1)void set(int field,int value)方法设置对应时间分量的值
2)第一个参数为:时间分量,例如:年,月,日等等,第二个参数为对应的值
3)时间分量是一个int值,使用Calendar提供的常量
4)常用的时间分量:
-
DATE:月中的天
-
DAY_OF_MONTH:月中的天,月DATE一致
-
DAY_OF_WEEK:周中的天,星期几
-
DAY_OF_YEAR:年中的天
public class Test {
public static void main(String[] ages) throws ParseException {
Calendar calendar = Calendar.getInstance();
System.out.println(calendar.getTime()); //Sun May 08 07:57:08 GMT+08:00 2022
calendar.set(calendar.YEAR,2008);
calendar.set(Calendar.MONTH,calendar.AUGUST);
calendar.set(Calendar.MONTH,7); //7代表八月
calendar.set(Calendar.DAY_OF_MONTH,8); //设置日
calendar.set(Calendar.HOUR_OF_DAY,20); //设置时
calendar.set(Calendar.MINUTE,8); //设置分
calendar.set(Calendar.SECOND,8); //设置秒
System.out.println(calendar.getTime()); //Fri Aug 08 20:08:08 GMT+08:00 2008
}
}
(5)、add
void add(int field,int value)方法对指定的时间分量加上给定的值,若给定的值是负值,则是减去给定的值
public class Test {
public static void main(String[] ages) throws ParseException {
Calendar calendar = Calendar.getInstance();
System.out.println(calendar.getTime()); //Sun May 08 08:06:37 GMT+08:00 2022
calendar.add(Calendar.YEAR,3); //增加三年
calendar.add(Calendar.MONTH,2); //增加两月
calendar.add(Calendar.DAY_OF_YEAR,8); //添加日需用DAY_OF_YEAR,加天数可能会跨月
calendar.add(Calendar.HOUR_OF_DAY,-5); //五小时前
System.out.println(calendar.getTime()); //Wed Jul 16 03:06:37 GMT+08:00 2025
}
}
(6)、getActualMaximum
int getActualMaximum(int field)方法获取某一个时间分量所运行的最大值
public class Test {
public static void main(String[] ages) throws ParseException {
Calendar calendar = Calendar.getInstance();
int days = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); //查看当月共多少天
int days01 = calendar.getActualMaximum(Calendar.DAY_OF_YEAR); //查看今年共多少天
System.out.println("今年有"+days01+"天,这个月有"+days+"天");
}
}