System类
垃圾回收方法 public static void gc();
获取系统时间 public static long currentTimeMillis();
数组拷贝 public static void arraycopy(Object src, int srcPos,Object dest, int destPos,int length)
package com.nim.day14;
class A{
@Override //帮助检查是否是父类中的方法
protected void finalize() throws Throwable {
System.out.println("hello");
super.finalize();
}
}
public class SystemDemo {
public static void main(String[] args) {
/*
//system类的方法
long time1 = System.currentTimeMillis();
//System.out.println(time);
for(int i = 0;i<100000;i++){
System.out.println();
}
long time2 = System.currentTimeMillis();
System.out.println(time2 - time1);
*/
// new A();
// System.gc();
//System.arraycopy();复制数组
int[] res = {1,2,3,4,5};
print(res);
int[] dest = new int[5];
print(dest);
System.out.println("--------");
//使用System.arraycopy()复制数组的方法
System.arraycopy(res, 0, dest, 1, 3);
print(dest);
//copy(res);
System.out.println("----------");
print(copy(res));
}
//之前复制一个数组的方法
public static int[] copy(int[] arr){
int[] src =new int[arr.length];
for (int i = 0; i < arr.length; i++) {
src[i] = arr[i];
}
return src;
}
public static void print(int[] arr){
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
System.out.println();
}
}
日期类
Date类:用于表示日期的类,可以表示特定的瞬间,精确到毫秒
构造方法:Date()使用当前系统时间构造一个Date对象,底层调用的是第二个带参的构造方法
Date(long date)使用指定的毫秒值,在GMT基准时间的基础上加上指定时间构造一个Date对象
成员方法:
long getTime():获取日期所代表的毫秒值与世界时的差
void setTime(long time):用毫秒值设置时间
package com.nim.day14;
import java.util.Date;
public class DateDemo {
public static void main(String[] args) {
/*
// Date();取出系统当前时间
Date d = new Date();
System.out.println(d);
long time = System.currentTimeMillis();
Date d1 = new Date(time);
System.out.println(d1);
System.out.println(d1.getTime()==time);
*/
long time = System.currentTimeMillis();
Date d = new Date();
d.setTime(time);
System.out.println(d);
}
}
SimpleDateFormat类
1、格式化日期 2、解析:此时需要解析的文本必须用格式化时的模式才能解析
package com.nim.day14;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class SimpleDateDemo {
public static void main(String[] args) {
/*
String pattern = "yyyy年MM月dd日 HH:mm:ss";
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
// 创建当前日期对象
Date d = new Date();
//date对象到字符串 格式化日期过程
String format = sdf.format(d);
System.out.println(format);
*/
//解析字符串成日期对象
String strDate = "2018年09月13日 11:06:17";
String pattern = "yyyy年MM月dd日 HH:mm:ss";
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
try {
Date d = sdf.parse(strDate);
System.out.println(d);
} catch (ParseException e) {
System.out.println("解析日期异常");
e.printStackTrace();
}
}
}
日期工具类的封装
对于频繁使用的日期转换功能,考虑封装到工具类中,方便使用 既然是工具类,一般都是静态方法,直接使用类名调用,将构造方法私有
package com.nim.day14;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/*
* 定义date工具类
*/
public class DateTool {
//构造方法私有化
private DateTool() {}
//格式化日期对象
public static String dateToString(Date d,String pattern){
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
return sdf.format(d);
}
//调用工具类解析字符串为日期对象
public static Date stringToDate(String d,String pattern) throws ParseException{
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
Date date = sdf.parse(d);
return date;
}
}
package com.nim.day14;
import java.text.ParseException;
import java.util.Date;
public class DateToolDemo {
public static void main(String[] args) {
//格式化日期
String pattern = "yyyy-MM-dd";
Date d = new Date();
String res = DateTool.dateToString(d, pattern);
System.out.println(res);
//解析
try {
Date date = DateTool.stringToDate(res, pattern);
System.out.println(date);
} catch (ParseException e) {
System.out.println("解析日期异常");
e.printStackTrace();
}
}
}
工具类的使用
package com.nim.day14;
import java.text.ParseException;
import java.util.Date;
import java.util.Scanner;
/*
* 算一下你来到这个世界多少天?
思路:
1.我们知道的是生日,是字符串的形式
2.用工具类将这个字符串转换成一个日期对象:Date d (1980,01,01)
3.得到生日对象的毫秒值
4.得到现在系统的毫秒值
5.得到二者的毫秒差
6.使用毫秒差换算得到天数
*/
public class DateDemo2 {
public static void main(String[] args) throws Exception {
Scanner s = new Scanner(System.in);
System.out.println("请输入出生日期:(yyyy-MM-dd)");
String birthday = s.next();
String pattern = "yyyy-MM-dd";
//调用工具类将字符串转换成日期对象
Date date = DateTool.stringToDate(birthday, pattern);
//得到生日对象的毫秒值
long time1 = date.getTime();
Date date2 = new Date();
//得到现在系统的毫秒值
long time2 = date2.getTime();
//得到二者的毫秒差
long time3 = time2 - time1;
System.out.println("您已经来到世界上 " + time3 / 1000 / 3600 /24 +"天");
}
}
Calendar日历类
Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等 日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法
获取日历对象的方法: Calendar rightNow = Calendar.getInstance();
获取年 int year = rightNow.get(Calendar.YEAR);
获取月 int month = rightNow.get(Calendar.MONTH);
Calendar 类常用方法
void set(int field,int amount) 根据日历的规则,添加或者减少指定的时间量
int getActualMaximum(int field) 返回指定日历字段可以拥有的最大值
int getActualMinimum(int field) 返回指定日历字段可以拥有的最小值
package com.nim.day14;
import java.util.Calendar;
public class CalendarDemo {
public static void main(String[] args) {
Calendar c = Calendar.getInstance();
// System.out.println(c);
int i = c.get(Calendar.YEAR);
// System.out.println(i);
// System.out.println(c.get(Calendar.MONTH));//month从0开始
// System.out.println(c.get(Calendar.DAY_OF_MONTH));
// System.out.println(c.get(Calendar.DATE));
// System.out.println(c.get(Calendar.AM_PM));
// System.out.println(c.get(Calendar.HOUR));
// System.out.println(c.get(Calendar.MINUTE));
c.set(Calendar.YEAR, 2017);
System.out.println(c.get(Calendar.YEAR));
c.add(Calendar.YEAR, 1);
System.out.println(c.get(Calendar.YEAR));
c.set(Calendar.MONTH,1);
System.out.println(c.get(Calendar.DATE));
}
}
package com.nim.day14;
import java.util.Calendar;
/*
* 练习:
获取任意一年的二月份有多少天?
*/
public class CalendarDemo2 {
public static void main(String[] args) {
Calendar c = Calendar.getInstance();
c.set(Calendar.YEAR, 2018);
/*
//第一种方法使用Calendar日历类方法判断
c.set(Calendar.MONTH,1);
int max = c.getActualMaximum(Calendar.DAY_OF_MONTH);
*/
//第二中方法,三月的第一天减一
c.set(Calendar.MONTH,2);
c.set(Calendar.DATE,1);
c.add(Calendar.DATE, -1);
int max = c.getActualMaximum(Calendar.DATE);
System.out.println(max);
}
}