目录
练习: 请使用日期时间相关的API,计算出一个人已经出生了多少天。
常用方法:get方法、set方法、add方法、getTime方法
Date类
java.util.Date 类 表示特定的瞬间,精确到毫秒。
两个构造方法
- public Date() :分配Date对象并初始化此对象,以表示分配它的时间(精确到毫秒)。(获取当前日期)
- public Date(long date) :分配Date对象并初始化此对象,以表示自从标准基准时间(称为“历元 (epoch)”,即1970年1月1日00:00:00 GMT)以来的指定毫秒数。(将长整型的数据【毫秒值】转化成Date格式的数据)
常用方法
public long getTime() 把日期对象转换成对应的时间毫秒值
列:Date两个构造方法、getTime()方法联系
public static void main(String[] args) {
demo01();//Date类的空参数构造方法
demo02();//Date类的带参数构造方法
demo03();
}
/*
long getTime() 把日期转换为毫秒值(相当于System.currentTimeMillis()方法)
返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。
*/
private static void demo03() {
Date date=new Date();
long time = date.getTime();
System.out.println(time);//1597762426601
}
/*
Date类的带参数构造方法
Date(long date) :传递毫秒值,把毫秒值转换为Date日期
*/
private static void demo02() {
Date date=new Date(0L);
System.out.println(date);//Thu Jan 01 08:00:00 CST 1970
}
/*
Date类的空参数构造方法
Date() 获取当前系统的日期和时间
*/
private static void demo01() {
Date date=new Date();//获取当前系统的日期和时间
System.out.println(date);//Tue Aug 18 22:53:46 CST 2020
}
DateFormat类
java.text.DateFormat 是日期/时间格式化子类的抽象类,这个类可以完成日期和文本之间的转换,也就是可以在Date对象与String对象之间进行来回转换。
由于DateFormat为抽象类,不能直接使用,所以要用子类 java.text.SimpleDateFormat 。这个类需要一个 模式(格式)来指定格式化或解析的标准。
public SimpleDateFormat(String pattern) | 用给定的模式和默认语言环境的日期格式符号构造 SimpleDateFormat。 |
String pattern:传递指定的模式 如:yyyy-MM-dd HH:mm:ss |
常用的格式规则为:
标识字母(区分大小写) | 含义 |
y | 年 |
M | 月 |
d | 日 |
H | 时 |
m | 分 |
s | 秒 |
format方法,parse方法
public String format(Date date) :将Date对象格式化为字符串。
public Date parse(String source) :将字符串解析为Date对象。
列:文本转化成Date格式数据、Date数据转化成文本
package com.lws.demo03.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Demo01DateFormat {
public static void main(String[] args) throws ParseException {
demo01();
demo02();
}
//将指定格式的字符串转化为日期
public static void demo01() throws ParseException {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日 hh时MM分ss秒");
Date date = simpleDateFormat.parse("2020年08月18日 12时08分13秒");
System.out.println(date);//Tue Aug 18 00:00:13 CST 2020
}
/*String format(Date date) 按照指定的模式,把Date日期,格式化为符合模式的字符串*/
//将日期转化成指定格式的字符串
public static void demo02() {
//1.创建SimpleDateFormat对象,构造方法中传递指定的模式
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日 hh时MM分ss秒");
Date date = new Date();//获取当前时间
String s = simpleDateFormat.format(date);
System.out.println(s);//2020年08月18日 11时08分39秒
}
}
练习: 请使用日期时间相关的API,计算出一个人已经出生了多少天。
import java.util.Calendar;
public static void main(String[] args) throws ParseException {
System.out.println("请输入您的出生日期,格式:yyyy-MM-dd");
Scanner scanner = new Scanner(System.in);
String myDate = scanner.next();
//2.使用DateFormat类中的方法parse,把字符串的出生日期,解析为Date格式的出生日期
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date myBirthdayTime = simpleDateFormat.parse(myDate);
long time = myBirthdayTime.getTime();//将出生日期转化成毫秒
long newTime = new Date().getTime();//获取当前时间
long temp = newTime - time;
// System.out.println(time+"\t"+newTime+"\t"+temp);
System.out.println("我出生了:"+temp/1000/24/60/60+"天");
Calendar类
java.util.Calendar 是日历类,在Date后出现,替换掉了许多Date的方法。该类将所有可能用到的时间信息封装为静态成员变量,方便获取。日历类就是方便获取各个时间属性的。Calendar为抽象类,Calendar类在创建对象时并非直接创建,而是通过静态方法创建
public static Calendar getInstance() :使用默认时区和语言环境获得一个日历
import java.util.Calendar;
public class Demo01Calendar {
public static void main(String[] args) {
Calendar calendar=Calendar.getInstance();//多态 getInstance()返回Calendar类的子类对象
System.out.println(calendar);//java.util.GregorianCalendar[time=1597763448258,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=19,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2020,MONTH=7,WEEK_OF_YEAR=34,WEEK_OF_MONTH=4,DAY_OF_MONTH=18,DAY_OF_YEAR=231,DAY_OF_WEEK=3,DAY_OF_WEEK_IN_MONTH=3,AM_PM=1,HOUR=11,HOUR_OF_DAY=23,MINUTE=10,SECOND=48,MILLISECOND=258,ZONE_OFFSET=28800000,DST_OFFSET=0]
}
}
常用方法:get方法、set方法、add方法、getTime方法
- public int get(int field) :返回给定日历字段的值。
- public void set(int field, int value) :将给定的日历字段设置为给定值。
- public abstract void add(int field, int amount) :根据日历的规则,为给定的日历字段添加或减去指定的时间量。
- public Date getTime() :返回一个表示此Calendar时间值(从历元到现在的毫秒偏移量)的Date对象。
列:get/set方法、add方法、getTime方法练习
add方法可以对指定日历字段的值进行加减操作,如果第二个参数为正数则加上偏移量,如果为负数则减去偏移量
getTime方法 :Calendar中的getTime方法并不是获取毫秒时刻,而是拿到对应的Date对象
import java.util.Calendar;
import java.util.Date;
ublic class Demo02Calendar {
public static void main(String[] args) {
demo01();
demo02();
demo03();
demo04();
}
//public int get(int field):返回给定日历字段的值。
public static void demo01() {
Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
int hour = calendar.get(Calendar.HOUR);
int minute = calendar.get(Calendar.MINUTE);
int second = calendar.get(Calendar.SECOND);
System.out.println(year + "年" + hour + "时" + minute + "分" + second + "秒");//2020年11时22分3秒
}
/*
public void set(int field, int value):将给定的日历字段设置为给定值。
参数:
int field:传递指定的日历字段(YEAR,MONTH...)
int value:给指定字段设置的值
*/
public static void demo02() {
Calendar c = Calendar.getInstance();
c.set(Calendar.YEAR, 2020);
c.set(Calendar.MONTH, 8);
c.set(Calendar.DATE, 18);
/* //同时设置年月日,可以使用set的重载方法
calendar.set(8888,8,8);*/
System.out.println(c.get(Calendar.YEAR) + "年" + c.get(Calendar.MONTH)
+ "月" + c.get(Calendar.DATE) + "日");//2020年8月18日
}
/*
public abstract void add(int field, int amount):根据日历的规则,为给定的日历字段添加或减去指定的时间量。
把指定的字段增加/减少指定的值
参数:
int field:传递指定的日历字段(YEAR,MONTH...)
int amount:增加/减少指定的值 正数:增加 负数:减少
*/
public static void demo03() {
Calendar c=Calendar.getInstance();
c.add(Calendar.YEAR,2);
c.add(Calendar.MONTH,12);
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH);
System.out.println(year+"年"+month+"月");//2023年7月
}
/*
public Date getTime():返回一个表示此Calendar时间值(从历元到现在的毫秒偏移量)的Date对象。
把日历对象,转换为日期对象
*/
public static void demo04() {
Calendar c=Calendar.getInstance();
Date d = c.getTime();//将日历对象转化为日期对象
System.out.println(d);//Tue Aug 18 23:22:03 CST 2020
}
}