System类
System 类包含一些有用的类字段和方法。它不能被实例化,类中的方法和属性都是静态的。
在 System 类提供的设施中,有标准输入、标准输出和错误输出流;对外部定义的属性和环境变量的访问;加载文件和库的方法;还有快速复制数组的一部分的实用方法。
具体的各种方法可以查询API。
常见方法:
long currentTimeMillis();
获取当前时间的毫秒值。
Properties System.getProperties();
获取系统的属性信息,并存储到了Properties集合中。
properties集合中存储都是String类型的键和值。
最好使用它自己的存储和取出的方法来完成元素的操作。
public static void demo_1(){
//获取系统的属性信息,并存储到了Properties集合中。
Properties prop = System.getProperties();
Set<String> nameSet = prop.stringPropertyNames();
for(String name : nameSet){
String value = prop.getProperty(name);
System.out.println(name+"::"+value);
}
可以在程序中取得以上系统信息中的某一些:
private static final String LINE_SEPARATOR = System.getProperty("line.separator");
//取得当前系统下的换行符
System.out.println("hello-"+LINE_SEPARATOR+" world");
Runtime类
每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其运行的环境相连接。可以通过 getRuntime 方法获取当前运行时。
应用程序不能创建自己的 Runtime 类实例。
Runtime类没有构造方法摘要,说明该类不可以创建对象。
又发现还有非静态的方法。说明该类应该提供静态的返回该类对象的方法。而且只有一个,说明Runtime类使用了单例设计模式。
public class RuntimeDemo {
/**
* @param args
* @throws IOException
* @throws InterruptedException
*/
public static void main(String[] args) throws IOException, InterruptedException {
/*
* Runtime:没有构造方法摘要,说明该类不可以创建对象。
* 又发现还有非静态的方法。说明该类应该提供静态的返回该类对象的方法。
* 而且只有一个,说明Runtime类使用了单例设计模式。
*
*/
Runtime r = Runtime.getRuntime();
// execute: 执行。 xxx.exe
Process p = r.exec("notepad.exe"); //执行一个记事本程序
Thread.sleep(5000);
p.destroy();
}
}
Math类
Math 类包含用于执行基本数学运算的方法,都是静态的。如初等指数、对数、平方根和三角函数。
ceil():返回大于参数的最小整数。(向上取整)
floor():返回小于参数的最大整数。(向下取整)
round():返回四舍五入的整数。
pow(a,b):a的b次方。
double d1 = Math.ceil(12.56);//13
double d2 = Math.floor(12.56);//12
double d3 = Math.round(12.46);//12
double d = Math.pow(10, 2);//100
random():返回带正号的 double 值,该值大于等于 0.0 且小于 1.0。返回值是一个伪随机选择的数,在该范围内(近似)均匀分布。
Random r = new Random();//随机数对象
for (int i = 0; i < 10; i++) {
double d = Math.ceil(Math.random()*10);
double d = (int)(Math.random()*6+1);//扔骰子
double d = (int)(r.nextDouble()*6+1);//使用对象来生成随机数
int d = r.nextInt(6)+1;
System.out.println(d);
Date类
类 Date 表示特定的瞬间,精确到毫秒。
public static void methodDemo_1() {
long time = System.currentTimeMillis();//当前时间的毫秒值
System.out.println(time);//1541588823987
Date date = new Date();//将当前日期和时间封装成Date对象。
System.out.println(date);//Wed Nov 07 19:08:14 CST 2018
Date date2 = new Date(1541588823987l);//将指定毫秒值封装成Date对象。
System.out.println(date2);//Wed Nov 07 19:07:03 CST 2018
}
日期对象和毫秒值之间的转换
毫秒值–>日期对象 :
1,通过Date对象的构造方法 new Date(timeMillis);
2,还可以通过setTime设置。
这么处理是为了通过Date对象的方法对该日期中的各个字段(年月日等)进行操作。
日期对象–>毫秒值:
2,getTime方法。
long time1 = date1.getTime();
这么处理是为了通过具体的数值进行运算。
日期对象转成字符串
从 JDK 1.1 开始,应该使用 DateFormat 类来格式化和解析日期字符串。Date 中的相应方法已废弃。
要格式化一个当前语言环境下的日期,可使用某个静态工厂方法:
myString = DateFormat.getDateInstance().format(myDate);
myString = DateFormat.getDateTimeInstance().format(myDate);
如果格式化多个日期,那么获取该格式并多次使用它是更为高效的做法,这样系统就不必多次获取有关环境语言和国家/地区约定的信息了:
DateFormat df = DateFormat.getDateInstance();
for (int i = 0; i < myDate.length; ++i) {
output.println(df.format(myDate[i]) + "; ");
}
Date date = new Date();
//获取日期格式对象。具体着默认的风格。 FULL LONG等可以指定风格。
DateFormat dateFormat = DateFormat.getDateInstance();//2018年11月7日
//DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.FULL);//2018年11月7日星期三
//DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.LONG);//2018年11月7日
//DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG,DateFormat.LONG);
//2018年11月7日 CST 下午7:41:31
String str_date = dateFormat.format(date);
System.out.println(str_date);//2018年11月7日
如果风格是自定义的如何解决呢?SimpleDateFormat
DateFormat dateFormat = new SimpleDateFormat("yyyy--MM--dd");
String str_date = dateFormat.format(date);
System.out.println(str_date);//2018--11--07
字符串转成日期对象
将日期格式的字符串–>日期对象。
使用的是DateFormat类中的parse()方法。
public static void methodDemo_3() throws ParseException {
String str_date = "2012年4月19日";
DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.LONG);
Date date = dateFormat.parse(str_date);
System.out.println(date);//Thu Apr 19 00:00:00 CST 2012
}
SimpleDateFormat:
public static void methodDemo_3() throws ParseException {
String str_date = "2012年4月19日";
str_date = "2011---8---17";
DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.LONG);
dateFormat = new SimpleDateFormat("yyyy---MM---dd");//自定义格式
Date date = dateFormat.parse(str_date);//Wed Aug 17 00:00:00 CST 2011
System.out.println(date);
}
实例
-
“2015-3-6"到"2018-11-7” ,中间有多少天?
思路:
两个日期相减就哦了。
咋减呢?
必须要有两个可以进行减法运算的数。
能减可以是毫秒值。如何获取毫秒值?通过date对象。
如何获取date对象呢?可以将字符串转成date对象。 -
1,将日期格式的字符串转成Date对象。
-
2,将Date对象转成毫秒值。
-
3,相减,再变成天数
public class DateTest {
/**
* @param args
* @throws ParseException
*/
public static void main(String[] args) throws ParseException {
String str_date1 = "2015-3-6";
String str_date2 = "2018-11-7";
test(str_date1,str_date2);
}
public static void test(String str_date1,String str_date2) throws ParseException {
//1,将日期字符串转成日期对象。
//定义日期格式对象。
DateFormat dateFormat = DateFormat.getDateInstance();
dateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date date1 = dateFormat.parse(str_date1);
Date date2 = dateFormat.parse(str_date2);
//将Date对象转成毫秒值。
long time1 = date1.getTime();
long time2 = date2.getTime();
//相减
long time = Math.abs(time1-time2);
//转换为天数
int day = getDay(time);
System.out.println(day);
}
private static int getDay(long time) {
int day = (int)(time/1000/60/60/24);//将毫秒转换为天数
return day;
}
打印结果为1342.
Calendar类
Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等 日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。
public static void showDate(Calendar c) {
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH)+1;//注意是从0开始的
int day = c.get(Calendar.DAY_OF_MONTH);
int week = c.get(Calendar.DAY_OF_WEEK);
System.out.println(year+"年"+month+"月"+day+"日"+getWeek(week));
}
public static String getWeek(int i) {
String[] weeks = {"","星期日","星期一","星期二","星期三","星期四","星期五","星期六"};
return weeks[i];
}
public static void main(String[] args) {
Calendar c = Calendar.getInstance();
showDate(c);//2018年11月7日星期三
}
set方法:
public static void main(String[] args) {
Calendar c = Calendar.getInstance();
int year = 2018;
showDays(year);
}
public static void showDays(int year) {
Calendar c = Calendar.getInstance();
c.set(year, 12, 7);//月份自动加1
c.add(Calendar.DAY_OF_MONTH, -1);//日期的偏移
showDate(c);//2019年1月6日星期日
}