javaseday20(系统类 时间 runtime math date calendar)

来源:互联网 发布:ios看书软件 编辑:程序博客网 时间:2024/06/05 02:48

类中没有构造方法 说明构造方法被私有了 不能创建对象 而且里面的方法都是静态的

但是又具备 非静态方法 那么说明有一个方法是静态的而且 返回一个对象  这就是单例设计模式

/*
 * System:类中的方法和属性都是静态的
 *
 * 常见方法
 * long currentTimeMills() 获取当前时间的毫秒值
 */
public class SystemDemo01 {
private static final String LINE_SEPARATOR = System.getProperty("line.separator");//常量大写
public static void main(String[] args) {


long l1 = System.currentTimeMillis();
System.out.println(l1);
long l2 = System.currentTimeMillis();
System.out.println(l2-l1);
// demo_1(); 
//给系统设置一些属性信息 这些信息是全局的 其他程序都可以用
System.setProperty("myclasspath", "c:/myclass");
System.setProperty("mykey", "mayvalue");
System.out.println("hello  "+LINE_SEPARATOR+" world");//unix 只认\n换行 所以用系统的
}
//虚拟机启动的时候都会先拿系统上的信息
public static void demo_1(){
//获取系统的属性信息 并存储到 Properties集合中  是Map集合
Properties prop = System.getProperties();//键和值都是String 所以没泛型
/*
* Properties集合存储的都是String类型的值
* 最好使用它自己的存储和取出方法来完成元素的操作
*/
Set<String> nameSet = prop.stringPropertyNames();
for(String a :nameSet){
String value = prop.getProperty(a);
System.out.println(a+".."+value);
}
}

}


/*
* Runtime 没有构造方法摘要 说明该类不可以创建对象
* 又发现还有非静态的方法 说明该类 应该提供静态的返回该类对象的方法
* 而且只有一个 说明Runtime类使用了单例设计模式
*
* 保证了对象唯一性
*/
Runtime r = Runtime.getRuntime();


//execute 执行 xxx.exe  exe就是execute的简称
try {
r.exec("notepad.exe");//当前找不到就去系统路径找
} catch (IOException e) {


e.printStackTrace();
}
// r.exec("c:\\abc\\QQ.exe");//绝对 路径    \是转译 所以用两个
// r.exec("baofengyingyin.exe c:\\RuntimeDemo.avi");//用暴风影音解析 播放文件
Process p = r.exec("notepad.exe");

p.destroy();


}
}

/*
* Math:提供了操作数学运算的方法都是静态的
*
* 常用方法
* ceil();
* floor();
* round();
* pow(a,b); a的b次方
*/
// double d1 = Math.ceil(12.43);//返回大于参数的最小整数
// double d2 = Math.floor(12.55);//返回小于参数的最大整数
// double d3 = Math.round(213.1);//返回四舍五入的整数
// sop("d1="+d1);
// sop("d2="+d2);
// sop("d3="+d3);
// double d4 = Math.pow(10, 2);
// sop("d4="+d4);
Random r = new Random();
for (int i = 0; i < 10; i++) {


double d = Math.floor(Math.random()*10);//0~9
double d1 = Math.ceil(Math.random()*10);//1~10
double d2 = (int)(Math.random()*6+1);//骰子


int d3 = r.nextInt(6)+1;//还有其他扩展方法
System.out.println(d);
}


}


private static void sop(String string) {
System.out.println(string);
}
}

/*
 * 13月就是下一年的一月
 * 时间是连续的 计算机中0是1月
 */
public class DateDemo01 {
public static void main(String[] args) throws ParseException {
// Demo01();
// Demo02();
Demo03();


}//格式化 是指这个事物按照指定的格式进行转换 重新按照格式建立


/**
* 对日期对象进行格式化
* 将日期对象——>日期格式的字符串
*  使用的是DateFormat中的format方法
*/
private static void Demo02() {
Date date = new Date();


//获取日期格式对象 具备默认风格MEDIUM是默认
DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.FULL);
   dateFormat = DateFormat.getDateTimeInstance(DateFormat.FULL,DateFormat.LONG);


//如果风格是自定义的
System.out.println(dateFormat);
dateFormat = new SimpleDateFormat("yyyy MM dd");
   String str_date = dateFormat.format(date);


System.out.println(str_date);


}
/**
*  将日期格式的字符串 ——>日期对象
* 使用的是DateFormat类中的parse()方法
* @throws ParseException
*/
public static void Demo03() throws ParseException{
String str_date = "2012---4--11";


DateFormat dateFormat = DateFormat.getDateInstance();
dateFormat = new SimpleDateFormat("yyyy---MM--dd");//自己创个格式匹配传入的字符串
Date date = dateFormat.parse(str_date); //通过parse()方法解析


System.out.println(date);
}


/**
* 日期对象和毫秒值之间的转换
*
* 毫秒值——>日期对象
* 1、通过Date对象的构造方法 new Date(timeMillis);
* 2、还可以通过setTime设置
* 因为可以通过Date对象的方法对该日期中的各个字段(年月日等)进行操作  能解析毫秒值
*
* 日期对象——>毫秒值
* 2、getTime方法
* 因为可以通过具体的数值进行 运算  2个对象不能减 毫秒值可以减 可以算相差的时间
*
*
*/


public static void Demo01() {
long time = System.currentTimeMillis();
System.out.println(time);


Date date = new Date();//将当前日期和时间封装成Date对象
System.out.println(date);


Date date2 = new Date(1502778013059l);//将指定毫秒值封装成对象 注意加l表示长整型不然无法默认int
System.out.println(date2);
}
}

/*
* 练习
* "2017-8-15"到"2017-9-16"
* 中间有多少天
* 思路
* 两个日期相减
* 怎么减?
* 必须要有两个可以进行减法运算的数
* 能减的可以是毫秒值 如何获取毫秒值 通过date对象
* 如何获取date 对象 可以将字符串转成date对象
*
* 1、将日期格式的字符串转成date对象
* 2、将Date对象转成毫秒值
* 3、相减 再变成天数
*
*
*/
public static void main(String[] args) throws ParseException {
String str_date1 = "2017-8-15";
String str_date2 = "2017-9-16";


test(str_date1,str_date2);
}


private 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);


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;
}


public static void main(String[] args) {


Calendar c = Calendar.getInstance();
int year =1111;
showDays(year);
// Demo_02();


// Demo_01();
}


public static void Demo_0(int year) {
Calendar c = Calendar.getInstance();


c.set(year,11,4);


//在此基础上偏移
c.add(Calendar.YEAR, 2); //2往右边偏移
c.add(Calendar.MONTH, 2);//时间是连续的 注意到头
showDate(c);
}
public static void showDays(int year) {
Calendar c = Calendar.getInstance();


c.set(year,2,1);


c.add(Calendar.DAY_OF_MONTH, -1);//获取2月的天数
showDate(c);
}


public static void showDate(Calendar c) {
// System.out.println(c);
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH)+1;
int day = c.get(Calendar.DAY_OF_MONTH);
int week = c.get(Calendar.DAY_OF_WEEK); //对老外来将星期日是第一天
System.out.println(year+"."+month+"."+day+"."+getWeek(week));
// System.out.println(c.get(Calendar.YEAR));
}
public static void Demo_01() {
Calendar c =  Calendar.getInstance();
// System.out.println(c);
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH)+1;
int day = c.get(Calendar.DAY_OF_MONTH);
int week = c.get(Calendar.DAY_OF_WEEK); //对老外来将星期日是第一天
System.out.println(year+"."+month+"."+day+"."+getWeek(week));
// System.out.println(c.get(Calendar.YEAR));
}


public static String getWeek(int i ){
String[] week = {"","星期日","星期一","星期二","星期三","星期四","星期五","星期六"};//角标1是星期日


return week[i];
}



阅读全文
0 0