- 时间戳,获取日期和时间。 表示日期和时间的类,在java.util.Date 下。
- 表示当前距 1970年1月1日00:00:00时间的毫秒数,精确到毫秒(1000毫秒 = 1秒)。
- 需要将Date与long类型毫秒值之间的转换。
1.Date --> long类型毫秒值 public long getTime(); 2.long类型--> Date 通过构造方法 new Date(long l); 2.1 setTime(long l);1.3 如何使用
- Date类有设计上得缺陷,但是也是值得我们去了解一下。
- 需要记住: long 转换 Date 和 Date 转换 long。
public class DateClass {
public static void main(String[] args) {
//1.创建对象,通过构造方法;
Date date = new Date();
//思考一下: 打印的是地址值么!? 如果不是那是不是就被重写了!重写了toString()
System.out.println(date);// 获取本地时间。
//1.1 通过一个long 类型的毫秒时间 System.currentTimeMillis() ;
long l = System.currentTimeMillis();
System.out.println(l);//1653312000408 毫秒,一个时间戳
//1.2 long(毫秒值)-->Date new Date(long l);
Date date2 = new Date(1653312000408l); //1653312000408l 以前的时间。
System.out.println(date2); //之前的时间。
//1.3 long(毫秒值)-->Date setTime()
date2.setTime(1653312000408l);
System.out.println(date2);
//2. Date-->long(毫秒值) ,相当于返回一个long类型毫秒的时间戳!
long time = date.getTime();
System.out.println(time);
}
}
1.4 时间工具类 DateFormat类
- 为了能让使用者读懂Date日期输出,变得有意义, 就会使用日期格式化工具类。
- DateFormat 类是抽象类,无法创建对象就需要使用其实现类 SimpleDateFormat。
new SimpleDateFormat(模式); 日期和时间模式: 格式:yyyy-MM-dd HH:mm:ss MM/dd/yyyy..1.4.2 常见方法
- 需要掌握的方法功能,从字符串(文本)–>Date,从Date–>字符串(文本)之间的转换。
1.format(Date):把 Date格式化字符串。 2.parse(String): 把字符串转换为Date。 注:这两个方法都是它的父类: DateFormat类
public class DateFormatDemo {
public static void main(String[] args) throws ParseException {
//1,创建日期
Date date = new Date();
//2.格式化日期类,参考API 例子即可!
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//3.格式化输出
String resault = sdf.format(date); //调用的是父类的方法;
System.out.println(resault);
System.out.println("----------分割线---------------");
String dateStr = "2022年05月20日 13:14:00"; //自定义时间类型
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
//一定要注意: 时间类型 要与 解析的格式保持一致,String pattern 。错误: yyyy-MM月dd日 HH:mm:ss
Date parse = sdf2.parse(dateStr); //需要抛异常!
System.out.println(parse);
}
}
输出结果:
2022-03-24 17:16:17 ----------分割线--------------- Fri May 20 13:14:00 CST 20221.4.3 练习:计算在地球生活的天数!
- 用户接受出生年月日,计算自己存活天数。注意:格式匹配,抛出异常!
public class DateTest01 {
public static void main(String[] args) throws ParseException {
//1.控制台接受输入结果:到现在的天数
System.out.println("请按照格式输入你的信息如:xxxx-xx-xx");
String input = new Scanner(System.in).next();
//2.相当于拿到string类型转换为Date类型在输出
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");// 注意:格式匹配!!
Date resault = sdf.parse(input); // 需要注意抛出异常!
System.out.println(resault);// 输出查看结果,
// 3.需要将Date类型转换为long类型
long beginTime = resault.getTime();
//4.获取当前时间节点
long time = System.currentTimeMillis();
//5 做减法。并计算天数
long days = (time-beginTime)/1000/60/60/24; // 将毫秒换算成天数!
System.out.println("存活天数 :"+days);
}
}
2. 简单介绍 Calendar类
- public abstract class Calendar日历类,抽象的,不能直接创建对象。可以单独获取日历上得某段属性。
- 抽象类,无法用new 来创建对象,怎么办!? 看Api
1. 调用静态方法 Calendar i= Calendar.getInstance(); //底层也是调用子类。 多态的形式。2.2 常用属性
- 通过字段属性,可以获取 日历的详情,如:年,月,日,等。
| 属性 | 名称 |
|---|---|
| YEAR | 年 |
| MONTH | 月 |
| DATE | 日 |
| HOUR | 小时 |
| MINUTE | 分 |
| SECOND | 秒 |
| DAY_OF_YEAR | 一年第几天 |
| WEEK_OF_YEAR | 一年第几周 |
| HOUR_OF_DAY | 24小时制 |
| DAY_OF_WEEK_IN_MONTH | 当月中的第几周 |
- public int get(int field) field 是常用属性字段。
- public final void set(int year, int month, int date, int hourOfDay,int minute)可以设置指定时间。
还有其它重载方法public void set(int field, int value)。给字段设置指定值。 - public abstract void add(int field, int amount) 根据日历的规则,将指定的时间量添加或减去给定的日历字段
public class CalenderDemo {
public static void main(String[] args) {
Calendar c = Calendar.getInstance();
System.out.println(c);//输出日历类的对象信息。 该信息包含了很多字段属性。
//1.查看当前时间
System.out.println(c.getTime());//同 Date类
//2.通过get(int field)方法获取 例如:年月日
//2.1 注意:月份是从0开始的11结束,所以计数需要加1 (c.get(Calendar.MONTH)+1)
//System.out.println(c.get(Calendar.YEAR)+"年" + (c.get(Calendar.MONTH)+1)+"月"+ c.get(Calendar.DATE)+"日");
//3.通过get(int field)方法获取 例如:时分秒
System.out.println(c.get(Calendar.HOUR)+":"+c.get(Calendar.MINUTE)+":"+c.get(Calendar.SECOND));
//4.直接调用方法输出即可!
CalendarToString(c);// 输出时间
//5.可以设置指定的时间。 1949年10月1日
c.set(1949,9,1,10,10,10);
CalendarToString(c);//输出set()后的时间! //1949年10月1日
//6.add()方法 获取5天之后 正数当前天往后,负数就是往前
c.add(Calendar.DAY_OF_MONTH,-5);
CalendarToString(c); //1949年9月26日
}
public static void CalendarToString(Calendar c){
System.out.println(c.get(Calendar.YEAR)+"年" + (c.get(Calendar.MONTH)+1)+"月"+ c.get(Calendar.DATE)+"日");
}
}
输出结果:
java.util.GregorianCalendar[time=1653401631717,.... 省略 Tue May 24 22:13:51 CST 2022 10:13:51 2022年5月24日 1949年10月1日 1949年9月26日2.4 练习: 获取任意一年的2月有多少天!?
- 啥是闰年!?满足啥条件才可以!?
public class CalendarTest {
public static void main(String[] args) {
System.out.println("请输入任意年份: ");
int year = new Scanner(System.in).nextInt();
//1.创建日历类型
Calendar c = Calendar.getInstance();
c.set(year,2,1); // 月份+1 下面
//你就将所有的3月1日时间往后减一天即可!
c.add(Calendar.DAY_OF_MONTH,-1);
CalendarToString(c);
}
public static void CalendarToString(Calendar c){
System.out.println(c.get(Calendar.YEAR)+"年" + (c.get(Calendar.MONTH)+1)+"月"+ c.get(Calendar.DATE)+"日");
}
}
输出结果:
请输入任意年份: 2004 2004年2月29日3. 扩展知识:正则表达式 RegEX
- 相当于一种“规则”,来描述或者匹配符合规则的一些字符串。相当于一种匹配字符串的方法,用来检查用户输入的内容是否符合要求(严格区分大小写的)。
- 老吴认为: 这玩意不硬记!需要的时候去百度搜即可! 只需要理解意思就行。
- 是String类中的方法。
public boolean matches(String regex) 告知此字符串是否匹配给定的正则表达式。3.2 练习匹配手机号
- 入门案例。
public class RegexDemo {
public static void main(String[] args) {
//1.控制台接受手机号
System.out.println("请输入手机号: ");
String iphone = new Scanner(System.in).next();
String regex ="1[0-9]{10}";
//3.然后需要判断
if (iphone.matches(regex)){
System.out.println(" 手机号正确,准备接受验证码...");
}else{
System.out.println("格式不对!");
}
}
}
- 如果是匹配身份证号呢!? 怎么办!?



