1.Date类
概述
java.uti1.Date 类 表示特定的瞬间,精确到毫秒。
继续查阅Date类的描述,发现Date拥有多个构造函数,只是部分已经过时,但是其中有未过时的构造函数可以把毫秒值转成日期对象,
- public Date) : 分配Date对象并初始化此对象,以表示分配它的时间(精确到毫秒)。
- public Date(long date):分配Date对象并初始化此对象,以表示自从标准基准时间(称为“历元 (epoch)",即1970年1月1日00:00:00 GMT) 以来的指定毫秒数。
tips:由于我们处于东八区,所以我们的基准时间19701月1日8时0分0秒
简单来说:使用无参构造,可以自动设置当前系统时间的毫秒时刻;指定long类型的构造参数,可以自定义毫秒时刻。例如:
import java.util.Date;
public class Demo0lDate {
public static void main(string[] args) {
//创建日期对象,把当前的时间
system.out.printIn(new Date()); // Tue jan 16 14:37:35 CST 2018
// 创建日期对象,把当前的毫秒值转成日期对象
system.out.printIn(new Date(0L)); // Thu jan 01 08 :00:00 CST 1970
}
}
tips:在使用println方法时,会自动调用Date类中的toString方法。Date类对Object类中的toString方法进行了覆盖重写,所以结果为指定格式的字符串。
常用方法
(1)获取当前时间(Date)
Date():无参数创建一个日期时间对象,获取的当前运行时间。
Date date = new Date();
System.out.println(date); // Thu Feb 21 14:22:09 GMT+08:00 2019
(2)获取原点后多少毫秒值的时间(Date(long time))
Date(Long time):参数代表从原点时刻所经过的毫秒数
Date date1 = new Date(1000l);
System.out.println(date1); // Thu Jan 01 08:00:01 GMT+08:00 1970
3)设置毫秒数(setTime)
设置进去一个毫秒数
long time=1000l*2*60*60*24;
Date d1 = new Date();
d1.setTime(time);
System.out.println(d1); // Sat Jan 03 08:00:00 GMT+08:00 1970
(4)获取毫秒数(getTime)
long time=1000l*2*60*60*24;
Date d1 = new Date();
d1.setTime(time);
System.out.println(d1.getTime()); // 172800000
案例:
import java.util.Date;
public class DateTest1 {
public static void main(String[] args) {
//日期类型:生出日期 下单时间 付款时间 预约时间
//类 Date 表示特定的瞬间,精确到毫秒
Date date1=new Date();//获取当前的时间
System.out.println(date1);
Date date2=new Date(1000);//创建距离1970年1月1日 08:00:00 (中国东区) 经过了多少毫秒的时间
System.out.println(date2);
}
}
2.SimpleDateFormat
字符串和时间之间的转换(SimpleDateFormat中format和parse的使用)
java.text.DateFormat 是日期/时间格式化子类的抽象类,我们通过这个类可以帮我们完成日期和文本之间的转换,也就是可以在Date对象与String对象之间进行来回转换。
- 格式化:按照指定的格式,从Date对象转换为String对象。
- 解析:按照指定的格式,从string对象转换为Date对象。
构造方法
由于DateFormat为抽象类,不能直接使用,所以需要常用的子类 java,text.simpleDateFormat,这个类需要一个模式(格式)来指定格式化或解析的标准。构造方法为:
public simpleDateFormat(string pattern): 用给定的模式和默认语言环境的日期格式符号构造SimpleDateFormat。
(“yyyy年MM月dd日 HH:mm:ss”);我们一般使用这个构造方法来实例化SimpleDateFormat对象。
参数字符串代表格式,只要记住一套即可:(严格区分大小写)
格式规则
常用的格式规则为:
标识字母(区分大小写) | 含义 |
y | 年 |
M | 月 |
d | 天 |
H | 小时 |
m | 分钟 |
s | 秒钟 |
S | 毫秒 |
格式化:Date–>string format(Date date):将参数日期时间对象,变成字符串
Date date=new Date();
//SimpLeDateFormat是DateFormat的子类,用来做日期和字符串之间的相互转换
//实网化日期格式化类,指定格式化的格式样式
SimpleDateFormat sdf=new SimpleDateFormat("yyy/MM/dd HH:mm:ss");
//日期 格式化成 宁符串
String format = sdf.format(date);
System.out.println(format);
解析:string–>Date parse(String str):将参数字符串转换为对应的日期时间
String date="2019-02-52 14:57:14";
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-DD HH:mm:ss");
Date parse = dateFormat.parse(date);
System.out.println(parse); // Thu Feb 21 14:57:14 GMT+08:00 2019
案例:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateFormatTest2 {
public static void main(String[] args) throws ParseException {
Date date=new Date();
//SimpLeDateFormat是DateFormat的子类,用来做日期和字符串之间的相互转换
SimpleDateFormat sdf=new SimpleDateFormat("yyy/MM/dd HH:mm:ss");//实网化日期格式化类,指定格式化的格式样式
//日期 格式化成 宁符串
String format = sdf.format(date);
System.out.println(format);
//字符串 解析成 日期
String time="2000/10/15 08:10:20";
Date date1=sdf.parse(time);
System.out.println(date1);
}
}
3.calendar
获取日历对象(calendar)
java.uti1.calendar 是日历类,在Date后出现,替换掉了许多Date的方法。该类将所有可能用到的时间信息封装为静态成员变量,方便获取。日历类就是方便获取各个时间属性的。
获取方式
Calendar为抽象类,由于语言敏感性,Calendar类在创建对象时并非直接创建,而是通过静态方法创建,返回子类对象,如下:
Calendar静态方法
public static calendar getInstance() : 使用默认时区和语言环境获得一个日历
//Calendar 的 getInstance 方法返回一个 Calendar对象
Calendar calendar=Calendar.getInstance();
//获取当前时间
Date time=calendar.getTime();
System.out.println(time);
根据参数,获取相应值(get(int field))
参数代表:你想要哪一条数据?年、月、日
参数不推荐使用int数字,推荐使用calendar当中的常量
//可以获取当前时间任何你想要获得的信息
int year = calendar.get(calendar.YEAR);//获取当前时间的年份
System.out.println("年份:"+year);
int month = calendar.get(calendar.MONTH);
System.out.println("月份:"+month+1);
int dayOfYear = calendar.get(calendar.DAY_OF_YEAR);
System.out.println("本年第:"+dayOfYear);
//Calendar 可以通过 get方法指定 字段值 来获取当前时间的一些信息
设置数据,成为指定的数值(set (int field,int value) )
Calendar instance = Calendar.getInstance();
instance.set(Calendar.YEAR,2019);
instance.set(Calendar.MONTH,1);
instance.set(Calendar.DAY_OF_MONTH,21);
instance.add(Calendar.MONTH,3);
instance.add(Calendar.DAY_OF_MONTH,8);
System.out.println(instance);
// java.util.GregorianCalendar[time=1559116495439,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="GMT+08:00",offset=28800000,dstSavings=0,useDaylight=false,transitions=0,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2019,MONTH=4,WEEK_OF_YEAR=22,WEEK_OF_MONTH=5,DAY_OF_MONTH=29,DAY_OF_YEAR=149,DAY_OF_WEEK=4,DAY_OF_WEEK_IN_MONTH=5,AM_PM=1,HOUR=3,HOUR_OF_DAY=15,MINUTE=54,SECOND=55,MILLISECOND=439,ZONE_OFFSET=28800000,DST_OFFSET=0]
YEAR=2019,MONTH=4 DAY_OF_MONTH=29
对数据进行偏移量计算(add (int field,int amount))
Calendar instance = Calendar.getInstance();
instance.set(Calendar.YEAR,2019);
instance.set(Calendar.MONTH,1);
instance.set(Calendar.DAY_OF_MONTH,21);
instance.add(Calendar.MONTH,3);
instance.add(Calendar.DAY_OF_MONTH,8);
System.out.println(instance);
// java.util.GregorianCalendar[time=1559116495439,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="GMT+08:00",offset=28800000,dstSavings=0,useDaylight=false,transitions=0,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2019,MONTH=4,WEEK_OF_YEAR=22,WEEK_OF_MONTH=5,DAY_OF_MONTH=29,DAY_OF_YEAR=149,DAY_OF_WEEK=4,DAY_OF_WEEK_IN_MONTH=5,AM_PM=1,HOUR=3,HOUR_OF_DAY=15,MINUTE=54,SECOND=55,MILLISECOND=439,ZONE_OFFSET=28800000,DST_OFFSET=0]
YEAR=2019,MONTH=4 DAY_OF_MONTH=29
将calendar转换为Date(getTime())
- Date类当中的getTime是获取毫秒数,得到long值。
- Calendar当中的getTime是获取Date对象。
Calendar instance = Calendar.getInstance();
System.out.println(instance.getTime()); // Thu Feb 21 16:01:45 GMT+08:00 2019
获取当前毫秒数(getTimeInMillis)
在Calendar中获取毫秒值是通过getTimeInMillis得到的。
Calendar instance = Calendar.getInstance(); System.out.println(instance.getTimeInMillis()) // 1550737081914
System
获取当前系统的毫秒数(currentTimeMillis())
获取系统运行此时此刻的毫秒数
long millis = System.currentTimeMillis();
System.out.println(millis); // 1550736560229
附加:他们仨的相互转换图:
案例:
import java.util.Calendar;
import java.util.Date;
public class CalendarTest3 {
public static void main(String[] args) {
//Calendar 的 getInstance 方法返回一个 Calendar对象
Calendar calendar=Calendar.getInstance();
//获取当前时间
Date time=calendar.getTime();
System.out.println(time);
//可以获取当前时间任何你想要获得的信息
int year = calendar.get(calendar.YEAR);//获取当前时间的年份
System.out.println("年份:"+year);
int month = calendar.get(calendar.MONTH);
System.out.println("月份:"+month+1);
int dayOfYear = calendar.get(calendar.DAY_OF_YEAR);
System.out.println("本年第:"+dayOfYear);
//Calendar 可以通过 get方法指定 字段值 来获取当前时间的一些信息
System.out.println("----------------------------");
//指定年月日、日分秒 月份0-11表示 1-12月
calendar.set(2022,11,25,23,59,60);
//获取指定的时间
Date date1 = calendar.getTime();
System.out.println(date1);
}
}