Java中的几个常用类(System,Runtime,Math,Date,Calendar)

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日星期日

	}

猜你喜欢

转载自blog.csdn.net/z714405489/article/details/83829998