1 Date类型
- 概述:
Date是表示时间的类型,此类可以表示特定的瞬间,精确到毫秒
是Java中提供的表示时间日期数据的类型
1.1 定义对象的方法
- public Date():分配 Date 对象并初始化此对象,以表示分配它的时间(精确到毫秒)
- public Date(long date):分配 Date 对象并初始化此对象,以表示自从标准基准时间(称为"历元(epoch)",即 1970 年 1 月 1 日 00:00:00 GMT)以来的指定毫秒数。
1.2 常用方法
方法名 | 解释 |
---|---|
public long getTime() | 返回自1970 年1月1日 00:00:00 GMT 以来此 Date 对象表示的 毫秒数 |
public void setTime(long time) | 设置此Date对象,以表示 1970 年1月1日 00:00:00 GMT以后 time 毫秒的时间点 |
2 SimpleDateFormat
- 概述:使用一个与语言环境有关的方式来格式化和解析日期的具体类
- 特点:
(1)java.text包,需要导包使用
(2)可以按照自定义的方式格式化日期
(3)可以按照指定格式解析日期
2.1 构造方法
方法名 | 解释 |
---|---|
public SimpleDateFormat() | 用默认的模式和默认语言环境的日期格式创建对象 |
public SimpleDateFormat(String pattern) | 指定解析日期的格式创建对象 |
2.2 常用方法
方法名 | 解释 |
---|---|
public final String format(Date date) | 将一个 Date 格式化为日期/时间字符串 |
public Date parse(String source) | 从给定字符串解析文本,以生成一个日期 |
注意事项:如果指定的格式不匹配,抛出ParseException
代码
package demos5_date;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Demo02 {
public static void main(String[] args) {
Date d = new Date();
System.out.println(d);
//使用SimpleDateformat类型默认的方式,格式化时间
SimpleDateFormat sim = new SimpleDateFormat();
String str = sim.format(d);
System.out.println(str);
//使用自己定义的方式,格式化时间展示
//如果需要制定格式:使用特定的符号
//y:年 M:月 dd:天 H:时 m:分 s:秒钟
//2021年8月19号 14时02分00秒
// SimpleDateFormat sim2 = new SimpleDateFormat("yyyy年M月dd号 HH时mm分ss秒");
SimpleDateFormat sim2 = new SimpleDateFormat("yyyy-M-dd HH:mm:ss");
String str2 = sim2.format(d);
System.out.println(str2);
}
}
代码2
package demos5_date;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Demo03 {
public static void main(String[] args) throws ParseException {
String time = "2021年08月19号 14:11:50";
SimpleDateFormat sim = new SimpleDateFormat("yyyy年MM月dd号 HH:mm:ss");
//将一个字符串解析为一个Date对象
Date date = sim.parse(time);
System.out.println(date);
}
}
3 案例1
在控制台上输入一个long类型的毫秒值,将录入的毫秒值换算成对应的Date时间对象,将获取的Date对象格式化成“2020年10月1日 20时20分20秒 “这种形式进行展示。
代码
package demos5_date;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
public class Test01 {
public static void main(String[] args) {
// 在控制台上输入一个long类型的毫秒值,将录入的毫秒值换算成对应的Date时间对象,
// 将获取的Date对象格式化成“2020年10月1日 20时20分20秒 “这种形式进行展示。
Scanner sc = new Scanner(System.in);
long g = sc.nextLong();
Date d = new Date(g);
SimpleDateFormat sim = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
String str = sim.format(d);
System.out.println(str);
}
}
4 案例2
键盘录入自己的生日,录入的格式可以为:0000年-00月-00日。
然后计算自己至今为止活了多少毫秒,活了多少天,活了多少年。
代码
package demos5_date;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
public class Test02 {
public static void main(String[] args) throws ParseException {
// 键盘录入自己的生日,录入的格式可以为:0000年-00月-00日。
// 然后计算自己至今为止活了多少毫秒,活了多少天,活了多少年。
Scanner sc = new Scanner(System.in);
System.out.println("请录入自己的生日:格式为:0000年-00月-00日");
String birthday = sc.nextLine();
//先把字符串转为date对象 ===》 毫秒值
SimpleDateFormat sim = new SimpleDateFormat("yyyy年-MM月-dd日");
Date date = sim.parse(birthday);
long time = date.getTime();//从元年-----当前录入时间的毫秒差
Date now = new Date();//当前时刻
long time2 = now.getTime();//当前时刻对应的毫秒
//当前时刻---出生时刻:活的时间
long time3 = time2-time;
System.out.println("恭喜你活了" + time3 + "毫秒");
System.out.println("恭喜你活了" + time3/1000/60/60/24 + "天");
System.out.println("恭喜你活了" + time3/1000/60/60/24/365 + "年");
}
}
5 Calendar类型
- 概述:用来表示和操作日历时间各个字段的类型
- 特点:
(1)java.util包,需要导包
(2)类型对象中中提供了各个时间字段,如:年、月、日、星期等
(3)类中提供了各种方法可以操作各个时间字段
(4)此类是一个抽象类,不能直接创建对象
5.1 常用字段
字段名 | Value |
---|---|
DAY_OF_MONTH | 本月第几天 |
DAY_OF_WEEK | 星期几(星期日~星期六) |
DAY_OF_YEAR | 当前年的第几天 |
HOUR_OF_DAY | 当天小时数 14 |
HOUR | 当前小时(12小时制) 2 |
MINUTE | 当前分钟 |
SECOND | 当前秒 |
WEEK_OF_MONTH | 当月第几周 |
WEEK_OF_YEAR | 本年第几周 |
YEAR | 当前年份 |
MONTH | 当前月份(系统默认月份是从0开始) |
5.2 常用方法
方法名 | 解释 |
---|---|
public static Calendar getInstance() | 使用默认时区和语言环境获得一个Calendar类子类对象 |
public int get(int field) | 获取指定字段的值 |
public void set(int field,int value) | 将给定的日历字段设置为给定 |
public abstract void add(int field,int amount) | 根据日历的规则,为给定的日历字段添加或减去指定的时间量 |
public final Date getTime() | 返回一个表示此 Calendar 时间值(从历元至现在的毫秒偏移量)的 Date 对象 |
对于
public void set()
如果传入两个参数,第一个参数默认为某个时间字段,第二个参数默认为要改的值
如果传入三个参数,默认为年月日
如果传入五个参数,默认为年月日,时分
如果传入六个参数,默认为年月日,时分秒
对于public abstract void add(int field,int amount)
可以传入正值,表示增加
可以传入负值,表示减少
代码
package demos5_date;
import java.util.Calendar;
import java.util.Date;
public class Demo04 {
public static void main(String[] args) {
//通过类中提供的静态方法,获取一个子类对象,使用父类引用接收
//该类对象中维护了表示时间的各个字段
Calendar can = Calendar.getInstance();
System.out.println(can);
//打印当前时间中各个字段对应的值:
System.out.println(can.get(Calendar.YEAR));
System.out.println(can.get(Calendar.DAY_OF_YEAR));
System.out.println(can.get(Calendar.DAY_OF_MONTH));
System.out.println(can.get(Calendar.DAY_OF_WEEK)-1);
System.out.println(can.get(Calendar.HOUR));
System.out.println(can.get(Calendar.HOUR_OF_DAY));
//将时间字段的值进行更改
can.set(Calendar.YEAR,2020);
System.out.println(can.get(Calendar.YEAR));
//三个参数,默认是年月日
can.set(2000,8,8);
System.out.println(can.get(Calendar.YEAR));
System.out.println(can.get(Calendar.MONTH));
System.out.println(can.get(Calendar.DAY_OF_MONTH));
//五个参数默认是:年月日时分
//六个参数默认是:年月日时分秒
can.set(2008,7,8,8,8,8);
System.out.println(can.get(Calendar.YEAR));
System.out.println(can.get(Calendar.MONTH));
System.out.println(can.get(Calendar.DAY_OF_MONTH));
System.out.println(can.get(Calendar.HOUR));
System.out.println(can.get(Calendar.MINUTE));
System.out.println(can.get(Calendar.SECOND));
//在某一个字段的基础上偏移某一个值
//正数:+
//负数:-
can.add(Calendar.YEAR,-1);
System.out.println(can.get(Calendar.YEAR));
//将Calendar转换为一个Date对象
Date d = can.getTime();
System.out.println(d);
}
}
5.3 总结
-
Date:表示某一个特定的时刻
Date—>毫秒 getTime()
毫秒值---->Date Date d = new Date(long 毫秒) -
SimpleDateFormat:格式化时间
Date ----> String format()
String -----> Date parse() -
Calendar:时间 表示时间对应的各个字段
Calendar----Date getTime()
6 案例
输入一个年份,使用Calendar类型判断该年份是一个闰年还是平年
提示:2月28天是平年 2月29天是闰年
代码
package demos5_date;
import java.util.Calendar;
import java.util.Scanner;
public class Test03 {
public static void main(String[] args) {
// 输入一个年份,使用Calendar类型判断该年份是一个闰年还是平年
// 提示:2月28天是平年 2月29天是闰年
Scanner sc = new Scanner(System.in);
System.out.println("请录入年份:");
int year = sc.nextInt();
Calendar can = Calendar.getInstance();
can.set(year,2,1);//2021 3 1
//将以上的时间:天数-1 获取的就是2月的最后一天
can.add(Calendar.DAY_OF_MONTH,-1);
//获取的就是2月的最后一天
int day = can.get(Calendar.DAY_OF_MONTH);
System.out.println(day==28?"平年":"闰年");
}
}
7 NumberFormat
- 概述:
NumberFormat是所有数值格式的抽象基类,此类提供格式化和解析数值的方式,可 用于格式化和解析任何语言环境的数值 - 特点:
(1)java.text包,需要导包
(2)该类是一个抽象类,不能创建对象
(3)该类提供了表示数字的不同格式
7.1 创建解析格式对象方法
方法名 | 解释 |
---|---|
public static final NumberFormat getInstance() | 返回当前默认环境的通用数值格式 |
public static final NumberFormat getCurrencyInstance() | 返回当前默认环境的货币格式 |
public static final NumberFormat getPercentInstance() | 返回当前默认环境的百分比格式 |
7.2 解析数字方法
方法名 | 解释 |
---|---|
public final String format(double number) | 按照指定对象格式,表示该数字 |
7.3 设置数字精确度方法
方法名 | 解释 |
---|---|
public void setMaximumFractionDigits(int newValue) | 设置小数部分所允许的最大位数 |
public void setMaximumIntegerDigits(int newValue) | 设置整数部分所允许的最大位数 |
代码
package demos6_numformat;
import java.text.NumberFormat;
public class Demo01 {
public static void main(String[] args) {
//创建一个数字格式化类型对象:默认格式(没有任何格式)
NumberFormat nf1 = NumberFormat.getInstance();
//设置数字小数部分最高保留3位
nf1.setMaximumFractionDigits(3);
//设置数字整数部分最高保留3为
nf1.setMaximumIntegerDigits(3);
String str = nf1.format(1234.1234567);
System.out.println(str);
//创建一个数字格式化类型:格式为¥
NumberFormat nf2 = NumberFormat.getCurrencyInstance();
//设置小数最高保留3位
nf2.setMaximumFractionDigits(3);
//设置整数最高保留3位
nf2.setMaximumIntegerDigits(3);
String str2 = nf2.format(1234.1234);
System.out.println(str2);
//创建一个数字格式化类型:格式 %
NumberFormat nf3 = NumberFormat.getPercentInstance();
//设置小数部分最低保留3位
nf3.setMinimumFractionDigits(3);
//设置整数部分最高保留3位
nf3.setMaximumIntegerDigits(3);
String str3 = nf3.format(231.123);//23112.3%
System.out.println(str3);
}
}