1. 毫秒值
获取系统当前时间的毫秒值,有了数值,方便我们对时间进行计算;
"2019-1-21 22:22:22"
时间原点:格林威治时间 1970-1-1 00:00:00 000
中国零时间 1970-1-1 08:00:00 000
2. Date 日期类
java.util.Date;
构造方法:
new Date(); 获取系统当前时间对象;
new Date(long l); 创建从时间原点到指定毫秒值的时间对象
new Date(1000); // 1970-1-1 00:00:01
成员方法:
void setTime(long l); 设置时间对象的毫秒值
long getTime(); 获取时间对象的毫秒值
new Student("阿含");
s.setName("阿含");
3. DateFormat 时间格式化类
子类:SimpleDateFormat
构造方法:
new SimpleDateFormat(); 根据默认模板创建时间格式化对象
new SimpleDateFormat(String s); 根据指定模板创建时间格式化对象
把字符串转成时间对象: 【解析】 "2019-1-19" -> yyyy-MM-dd
Date parse(String s);
把时间对象转成字符串: 【格式化】 yy-MM-dd SSS -> "19-1-19 "
format(Date d);
4. Calendar 日历类
为了让我们更加方便的来操作时间;
DAY_OF_MONTH 月中天
DAY_OF_YEAR 年中天
DAY_OF_WEEK 周中天
DATE 月中天
YEAR 年
MONTH 月
创建对象的方式:
Calendar c = Calendar.getInstance();
public static Calendar getInstance(){
return Calendar所有的子类对象;
}
class A{}
class B extends A{}
class C extends A{}
public A getA(){
return new A()/B()/C();
}
public B getA(){
return new B();
}
常用方法:
set(int filed,int date); 设置指定字段的值
例如
//创建Calendar对象 Calendar c = Calendar.getInstance(); //将给定的日历字段设置到Calendar对象中 c.set(2018,1,14);
add(int filed,int amount); 将指定字段的值进行加减操作
get(int filed); 获取指定字段的值
getTime(); 把日历对象转成时间对象
get(Calendar.DAY_OF_MONTH); //21
计算任意年是闰年还是平年:
闰年:366天 2月29天
平年:365天 2月28天
Calendar c = Calendar.getInstance();
c.set(2020,2,1); //设置时间为3月1号 0 ~ 11
c.add(Calendar.DAY_OF_MONTH,-1); //然后再向前-1一天,变成2月最后一天
System.out.println(c.get(Calendar.DAY_OF_MONTH)); //看看这一天是28还是29
c.set(2020,11,31); //设置时间为12月31号
System.out.println(c.get(Calendar.DAY_OF_YEAR)); // 看看这一天是年中的第几天,366还是365
在java8 中检测是否闰年
LocalDateTime localDateTime = LocalDateTime.now();
localDate.isLeapYear();//是否是闰年
注意事项:
1. 注意月份,日历类的月份是:0 ~ 11月 1 ~ 12月
2. 注意星期,日历类的星期是:星期天~星期六 1-7
// 查表法
public static String getWeek(int week) {
String[] arr = {"", "星期天", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
return arr[week];
}
JDK1.8新特性:时间类
LocalDate
LocalDate 提供了三种创建实例的方法:
LocalDateTime LocalDateTime 提供了三种创建实例的方法: LocalTime
LocalTime 提供了三种创建实例的方法:
常用方法:
1
2 日期转换
LocalDate localDate=LocalDate.now(); // 取本月第1天: LocalDate firstDayOfThisMonth =localDate.with(TemporalAdjusters.firstDayOfMonth()); // 2019-01-01 System.out.println(firstDayOfThisMonth); // 取本月第2天: LocalDate secondDayOfThisMonth =localDate.withDayOfMonth(2); // 2019-01-02 System.out.println(secondDayOfThisMonth); // 取本月最后一天,再也不用计算是28,29,30还是31: LocalDate lastDayOfThisMonth = localDate.with(TemporalAdjusters.lastDayOfMonth()); // 2019-01-31 System.out.println(lastDayOfThisMonth); // 取下一天: LocalDate firstDayOf2019 = lastDayOfThisMonth.plusDays(1); // 变成了2019-02-01 System.out.println(firstDayOf2019); // 取2019年1月第一个周一,这个计算用Calendar要死掉很多脑细胞: LocalDate firstMondayOf2019 = LocalDate.parse("2019-01-01").with(TemporalAdjusters.firstInMonth(DayOfWeek.MONDAY)); System.out.println(firstMondayOf2019);//2019-01-07
在新的Java 8中,日期和时间被明确划分为LocalDate
和LocalTime
,LocalDate
无法包含时间,LocalTime
无法包含日期。当然,LocalDateTime
才能同时包含日期和时间。新接口更好用的原因是考虑到了日期时间的操作,经常发生往前推或往后推几天的情况。
3 使用预定义的格式器来对日期进行解析/格式化
/*在java8之前,时间日期的格式化非常麻烦,经常使用SimpleDateFormat来进行格式化, 但是SimpleDateFormat并不是线程安全的。 在java8中,引入了一个全新的线程安全的日期与时间格式器。并且预定义好了格式。*/ public class Demo04LocalDate { public static void main(String[] args) throws ParseException { //java8之前 //有一个时间字符串 String strDate="2019-01-01"; //格式化 // 使用解析时注意 我们创建的日期格式化对象的解析字符串 必须与 时间字符串对应 SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd"); Date data=simpleDateFormat.parse(strDate); System.out.println(data); //java8 String date = "2019-01-01"; DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); LocalDate localDate = LocalDate.parse(date, dateTimeFormatter); System.out.println(localDate); } }
4 对日期进行格式化,转换成字符串
LocalDateTime类的实例,我们要把他转换成一个格式化好的日期串,与前例相同的是,我们仍需要制定模式串去创建一个DateTimeFormatter类的实例,但调用的是LocalDate.format()。这个方法会返回一个代表当前日期的字符串,对应的模式就是传入的DateTimeFormatter实例中定义好的 //创建一个DateFormat 对象 SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss"); //格式化当前时间 //获取当前时间对象 Date date=new Date();//Fri Jan 04 23:57:06 CST 2019 String string = sdf.format(date); System.out.println(string);//2019年01月04日 23:57:06 //DateTimeFormatter类的实例 LocalDate localDate = LocalDate.now(); DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy年MM日"); String format = localDate.format(dateTimeFormatter); System.out.println(format);
6. System
系统工具类:
static long currentTimeMillis(); 返回系统当前时间毫秒值
将src数组中从srcPos索引位置开始,拷贝,到dest数组从destPos索引位置开始,拷贝length个
void arrayCopy(object src,int srcPos,Object dest,int destPos,int length);
void exit(int i); 退出JVM