System类
包含一些有用的类字段和方法。它不能被实例化。
System
类提供的System
包括标准输入,标准输出和错误输出流; 访问外部定义的属性和环境变量; 一种加载文件和库的方法; 以及用于快速复制阵列的一部分的实用方法。
static PrintStream err //“标准”错误输出流。
static InputStream in //“标准”输入流。
static PrintStream out //“标准”输出流。
static long currentTimeMillis() //返回当前时间(以毫秒为单位)。
static void exit(int status) //终止当前运行的Java虚拟机。
static void gc() //运行垃圾回收器。
static Properties getProperties() //确定当前的系统属性。
static String getProperty(String key) //获取指定键指示的系统属性。
static String getProperty(String key, String def) //获取指定键指示的系统属性。
static void setProperties(Properties props) //将系统属性设置为 Properties参数。
static String setProperty(String key, String value) //设置由指定键指示的系统属性。
import java.util.Properties;
import java.util.Set;
public class SystemDemo {
private static final String LINE_SEPARATOR=System.getProperty("line.separator");
public static void main(String[] args){
/*
* System类中的方法和属性都是静态的
* 常见方法:
* long currentTimeMillis();
* */
long l1=System.currentTimeMillis();
System.out.println(l1);//1580449367055
DemoS();
System.out.println("Hello"+LINE_SEPARATOR+"World");/*Hellow 换行,所有操作系统通用
World*/
//给系统设置一些属性信息,这些信息是全局,其他程序都可以使用
System.setProperty("name","value");
}
public static void DemoS(){
//获取系统的属性信息,并存储到了Properties集合中。
/*properties集合中存储都是String类型的键和值
最好使用它自己的存储和取出方法来完成元素的操作。
* */
Properties prop=System.getProperties();
Set<String> nameSet=prop.stringPropertyNames();
for (String name : nameSet){
String value=prop.getProperty(name);
System.out.println(name+"::"+value);//系统信息
}
}
}
Runtime类
每个Java应用程序都有一个Runtime
类的Runtime
,允许应用程序与运行应用程序的环境进行接口。 当前运行时可以从getRuntime
方法获得。
应用程序无法创建自己的此类的实例。
Process exec(String command) //在单独的进程中执行指定的字符串命令。
Process exec(String[] cmdarray) //在单独的进程中执行指定的命令和参数。
abstract void destroy() //杀死子进程。
import java.io.IOException;
public class RuntimeDemo {
public static void main(String[] args)throws IOException,InterruptedException {
/*
* Runtime:没有构造方法摘要,说明该类不可以创建对象
* 又发现还有非静态的方法,说明该类应该提供静态的返回该类型对象的方法
* 而且只有一个,说明Ruantime类使用了单例设计模式*/
Runtime r=Runtime.getRuntime();
//execute:执行 xxx.exe
Process p=r.exec("notepad.exe D:\\RuntimeDemo.java");//开启可执行程序,解析可执行文件
Thread.sleep(5000);//停留5秒
p.destroy();//销毁进程
r.exec("D:\\游戏\\PlagueInc\\PlagueIncEvolved.exe");//此处纪念武汉病毒传播时玩瘟疫公司的游戏
}
}
Math类
Math
类包含执行基本数字运算的方法,如基本指数,对数,平方根和三角函数。
static int abs(int a) //返回值为 int绝对值。
static int addExact(int x, int y) //返回其参数的总和,如果结果溢出int,则抛出 int 。
static int max(int a, int b) //返回两个 int值中的较大值。
static double random() //返回值为 double值为正号,大于等于 0.0 ,小于 1.0 。
import java.util.Random;
public class MathDemo {
public static void main(String[] args){
double d1=Math.ceil(12.56);
double d2=Math.floor(12.56);
double d3=Math.round(12.56);
sop("d1="+d1);//d1=13.0
sop("d2="+d2);//d2=12.0
sop("d3="+d3);//d3=13.0
double dp=Math.pow(10,2);
sop("dp="+dp);
Random r=new Random();
for (int i=0;i<10;i++){
double d=Math.ceil(r.nextDouble()*10);
System.out.println(d);
}
}
public static void sop(String string){
System.out.println(string);
}
}
Date类
在类的所有方法Date
接受或返回年,月,日,小时,分钟和秒值,以下表述中使用:
- y年代表整数y
- 1900
。 - 一个月由0到11的整数表示; 0是1月,1是2月,等等; 11月12日。
- 日期(月的一天)以通常的方式从1到31的整数表示。
- 一小时由0到23之间的整数表示。因此,从午夜到凌晨1点的时间是小时0,从中午到下午1点的小时是12小时。
- 一般以0〜59的整数表示。
- 第二个由0到61的整数表示; 值60和61仅发生在闰秒上,甚至仅在实际上正确跟踪闰秒的Java实现中发生。 由于目前引入闰秒的方式,在同一分钟内不会在所有情况下,为这些目的而提供的方法的论证不必在指定范围内; 例如,可以将日期指定为1月32日发生两个闰秒,但是本规范遵循ISO C的日期和时间约定。
在所有情况下,为这些目的而提供的方法的论证不必在指定范围内; 例如,可以将日期指定为1月32日,并将其解释为2月1日。
Date() //分配一个 Date对象,并初始化它,以便它代表它被分配的时间,测量到最近的毫秒。
Date(long date) //分配一个 Date对象,并将其初始化为表示自称为“时代”的标准基准时间以后的指定毫秒数,即1970年1月1日00:00:00 GMT。
import java.util.Date;
public class DateDemo {
public static void main(String[] args){
long time=System.currentTimeMillis();
System.out.println(time);
Date date=new Date();
System.out.println(date);//当前时间
Date date1=new Date(1580529898142l);
System.out.println(date1);//Sat Feb 01 12:04:58 GMT+08:00 2020
}
}
子类
DateFormat类
DateFormat
是日期/时间格式化子类的抽象类,它以语言无关的方式格式化和分析日期或时间。 日期/时间格式化子类(如SimpleDateFormat
)允许格式化(即日期文本),解析(文本日期)和归一化。 该日期表示为一个Date
对象,或自1970年1月1日00:00:00 GMT以来的毫秒。
DateFormat
提供了许多类方法,用于根据默认或给定的区域设置和多个格式化样式获取默认的日期/时间格式化程序。 格式化风格包括FULL
, LONG
, MEDIUM
和SHORT
。 方法说明中提供了更多细节和使用这些样式的示例。
DateFormat
可帮助您格式化和解析任何区域设置的日期。 您的代码可以完全独立于几个月,几个星期甚至日历格式的区域设置约定:月球与太阳能。
要格式化当前区域设置的日期,请使用静态工厂方法之一:
myString = DateFormat.getDateInstance().format(myDate);
String format(Date date) //将日期格式化成日期/时间字符串。
static DateFormat getDateInstance() //获取默认格式化样式为默认的 FORMAT语言环境的日期格式化 程序 。
static DateFormat getDateInstance(int style) //获取默认的 FORMAT区域设置的给定格式化样式的日期格式化 程序 。
static DateFormat getDateInstance(int style, Locale aLocale) //获取给定区域设置的给定格式化样式的日期格式化程序。
static DateFormat getDateTimeInstance() //获取默认格式化样式的日期/时间格式化程序默认的 FORMAT区域设置。
static DateFormat getDateTimeInstance(int dateStyle, int timeStyle) //获取默认的 FORMAT区域设置的给定日期和时间格式化样式的日期/时间格式化 程序 。
static DateFormat getDateTimeInstance(int dateStyle, int timeStyle, Locale aLocale) //获取给定区域设置的给定格式样式的日期/时间格式化程序。
获取日期格式对象,具备着默认的风格。
Date date=new Date();
//获取日期格式对象,具备着默认的风格。
//DateFormat dateFormat=DateFormat.getDateInstance(DateFormat.FULL);//2020年2月1日 星期六
DateFormat dateFormat=DateFormat.getDateTimeInstance(DateFormat.LONG,DateFormat.LONG);//2020年2月1日 下午12时53分18秒
//DateFormat dateFormat=DateFormat.getDateInstance(DateFormat.SHORT);//20-2-1
//DateFormat dateFormat=DateFormat.getDateInstance(DateFormat.MEDIUM);//2020-2-1
//dateFormat=DateFormat.getDateTimeInstance();//2020-2-1 12:43:27
String str_date=dateFormat.format(date);
System.out.println(str_date);
获取自定义风格:子类
SimpleDateFormat类
-
日期和时间格式由日期和时间模式字符串指定。 在日期和时间模式字符串中,从
'A'
到'Z'
和从'a'
到'z'
的非引号的字母被解释为表示日期或时间字符串的组件的模式字母。 可以使用单引号('
)引用文本,以避免解释。"''"
代表单引号。 所有其他字符不被解释; 在格式化过程中,它们只是复制到输出字符串中,或者在解析过程中与输入字符串匹配。定义了以下图案字母(所有其他字符从
'A'
到'Z'
和从'a'
到'z'
被保留):Letter Date or Time Component Presentation Examples G
Era designator Text AD
y
Year Year 1996
;96
Y
Week year Year 2009
;09
M
Month in year (context sensitive) Month July
;Jul
;07
L
Month in year (standalone form) Month July
;Jul
;07
w
Week in year Number 27
W
Week in month Number 2
D
Day in year Number 189
d
Day in month Number 10
F
Day of week in month Number 2
E
Day name in week Text Tuesday
;Tue
u
Day number of week (1 = Monday, ..., 7 = Sunday) Number 1
a
Am/pm marker Text PM
H
Hour in day (0-23) Number 0
k
Hour in day (1-24) Number 24
K
Hour in am/pm (0-11) Number 0
h
Hour in am/pm (1-12) Number 12
m
Minute in hour Number 30
s
Second in minute Number 55
S
Millisecond Number 978
z
Time zone General time zone Pacific Standard Time
;PST
;GMT-08:00
Z
Time zone RFC 822 time zone -0800
X
Time zone ISO 8601 time zone -08
;-0800
;-08:00
Date date=new Date();
DateFormat dateFormat=new SimpleDateFormat("yyyy--MM--dd");//2020--02--01
String str_date=dateFormat.format(date);
System.out.println(str_date);
- 以下示例显示如何在美国地区中解释日期和时间模式。 给定的日期和时间是2001-07-04 12:08:56当地时间在美国太平洋时间时区。
Date and Time Pattern Result "yyyy.MM.dd G 'at' HH:mm:ss z"
2001.07.04 AD at 12:08:56 PDT
"EEE, MMM d, ''yy"
Wed, Jul 4, '01
"h:mm a"
12:08 PM
"hh 'o''clock' a, zzzz"
12 o'clock PM, Pacific Daylight Time
"K:mm a, z"
0:08 PM, PDT
"yyyyy.MMMMM.dd GGG hh:mm aaa"
02001.July.04 AD 12:08 PM
"EEE, d MMM yyyy HH:mm:ss Z"
Wed, 4 Jul 2001 12:08:56 -0700
"yyMMddHHmmssZ"
010704120856-0700
"yyyy-MM-dd'T'HH:mm:ss.SSSZ"
2001-07-04T12:08:56.235-0700
"yyyy-MM-dd'T'HH:mm:ss.SSSXXX"
2001-07-04T12:08:56.235-07:00
"YYYY-'W'ww-u"
2001-W27-3
public static void methodDemo_2()throws ParseException {
String str_date="2020年2月1日";
DateFormat dateFormat=DateFormat.getDateInstance(DateFormat.LONG);
Date date=dateFormat.parse(str_date);//Sat Feb 01 00:00:00 GMT+08:00 2020
System.out.println(date);
}
练习:
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/*
* "2012-3-17"到"2020-2-1"
* 中间有多少天*/
/*思路:
* 两个日期相减,必须要有两个可以进行减法运算的数
* 如何获取毫秒值?通过date对象,可以将字符串转成date对象
* 1.将日期格式的字符串转成Date对象
* 2.将Date对象转成毫秒值
* 3.相减,变成天数*/
public class DateTest {
public static void main(String[] args)throws ParseException{
String str_date1="2012-3-17";
String str_date2="2020-2-1";
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);
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;
}
}
Calendar类
所述Calendar
类是一个抽象类,可以为在某一特定时刻和一组之间的转换的方法calendar fields
如YEAR
, MONTH
, DAY_OF_MONTH
, HOUR
,等等,以及用于操纵该日历字段,如获取的日期下个星期。 时间上的瞬间可以用毫秒值表示,该值是从1970年1月1日00:00 00:00.000 GMT(Gregorian)的Epoch的偏移量。
该类还提供了用于在包外部实现具体日历系统的其他字段和方法。 这些字段和方法定义为protected
。
与其他区域设置敏感的类一样, Calendar
提供了一种类方法getInstance
,用于获取此类型的一般有用的对象。 Calendar
的getInstance
方法返回一个Calendar
对象,其日历字段已使用当前日期和时间进行初始化:
Calendar rightNow = Calendar.getInstance();
import java.util.Calendar;
public class CalendarDemo {
public static void main(String[] args){
Calendar c=Calendar.getInstance();
showDate(c);
}
public static void showDate(Calendar 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));
}
private static String getWeek(int i){
String[] weeks={"","星期日","星期一","星期二","星期三","星期四","星期五","星期六"};
return weeks[i];
}
}
判断某一年是否是闰年
package com.monfolld;
import java.util.Calendar;
/*判断某一年是否是闰年*/
public class CalendarDemo {
public static void main(String[] args){
Calendar c=Calendar.getInstance();//获取当前日期
int year=2014;
showDays(year);
}
public static void showDays(int year){
Calendar c=Calendar.getInstance();//获取当前日期
c.set(year,2,1);//指定一个日期 2011年4月20日星期三
c.add(Calendar.DAY_OF_MONTH,-1);//偏移两年 2013年4月20日星期六
showDate(c);
}
public static void showDate(Calendar 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));
}
private static String getWeek(int i){
String[] weeks={"","星期日","星期一","星期二","星期三","星期四","星期五","星期六"};
return weeks[i];
}
}