System类中的currentTimeMillis()方法、Date类、DateFormat类,SimpleDateFormat类、Calendar类、TimeZone类
System类
- 所属的包
java.lang
,不需要导入 - 不需要创建对象,通过类名就可以访问
- 有三个属性及若干的方法
- 三个属性
in
,out
,err
- 方法
gc()
,exit(0)
,currentTimeMillis()
重点在于currentTimeMillis()
,它返回一个当前系统时间与计算机元年之间的毫秒值(返回类型为long
)
计算机元年:1970-1-1 00:00:00
左右吧
写个例子:
public class Demo {
public static void main(String[] args){
long time = System.currentTimeMillis();
System.out.println(time);
}
}
result:
这个System
类中的currentTimeMillis()
方法,只能返回毫秒值,不太好
Date类
- 可以导入的包虽然不止一个,通常使用的是
java.util
包
- 通常使用
new Date()
或者new Date(long date)
这两个构造方法来构造对象
Date类中有很多构造方法和方法都已过时(虽然也能使用,但是系统不推荐使用)
import java.util.Date;
public class Demo {
public static void main(String[] args){
Date date = new Date();//默认用当前的系统时间构建date对象
System.out.println(date);//重写了toString,显示的是格林威治时间
}
}
before()
方法,若a.before(b)
a的时间在b之前,则返回true
,否则Kfalse
after()
方法,与上面方法相反
import java.util.Date;
public class Demo {
public static void main(String[] args){
Date date1 = new Date(1556030769233L); //这个时间是前面的
Date date2 = new Date();//默认用当前的系统时间构建date对象
System.out.println(date1.before(date2)+"----"+date1.after(date2));
}
}
getTime()
方法,获取对象的时间setTime()
方法,设置对象的时间,都是毫秒值
import java.util.Date;
public class Demo {
public static void main(String[] args){
Date date1 = new Date();
date1.setTime(1556030769233L);
System.out.println(date1.getTime());
}
}
DateFormat类,SimpleDateFormat类
- 可以处理一个Date日期的格式
- 所属的包
java.text
,需要导包使用 - 但它是抽象类,不能创建对象,要子类来使用
SimpleDateFormat
类是DateFormat
的子类
import java.text.SimpleDateFormat;
import java.util.Date;
public class Demo {
public static void main(String[] args){
Date date1 = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//格式具体含义看下表
String v = sdf.format(date1);//通过sdf对象将date1格式化成你描述的样子
System.out.println(v);
}
}
Calendar类
1.1版本之后出现的,把时区给考虑进去了
-
所属的包
java.util
,需要导包 -
有构造方法,但是是用
protected
修饰的,通常是访问不到的;
-
但是它提供了一些方法来获取对象,通常会调用默认的
getInstance()
方法来创建对象
常用方法: -
after()
-
before()
-
getTime()
-
setTime()
,以上四个方法和Date类中的是一样的 -
getTimeMillis()
返回毫秒值 -
getTimeZone()
返回时区 -
还可以使用
set
和get
来设置它的一部分,通过Calendar
类已经定义好的许多静态常量
import java.util.Calendar;
public class Demo {
public static void main(String[] args){
Calendar calendar = Calendar.getInstance();//获取系统当前时间的Calendar对象
System.out.println(calendar);
}
}
注意:System.out.println(calendar);
这个语句输出的是java.util.GregorianCalendar[time=1556033493046,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=29,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2019,MONTH=3,WEEK_OF_YEAR=17,WEEK_OF_MONTH=4,DAY_OF_MONTH=23,DAY_OF_YEAR=113,DAY_OF_WEEK=3,DAY_OF_WEEK_IN_MONTH=4,AM_PM=1,HOUR=11,HOUR_OF_DAY=23,MINUTE=31,SECOND=33,MILLISECOND=46,ZONE_OFFSET=28800000,DST_OFFSET=0]
解释一下:
java.util.GregorianCalendar//这是包名.类名
然后跟着这个后面的是一个中括号,里面包含的所有信息[name = value,name = value, ...]
,这种形式是JSON
在看一下get的用法:
import java.util.Calendar;
public class Demo {
public static void main(String[] args){
Calendar calendar = Calendar.getInstance();//获取系统当前时间的Calendar对象
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);//它这玩意有点怪异,是从0开始数的
int day = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println(year+"-"+month+"-"+day);
}
}
实际上表示的是 2019-4-23
然后调用set方法,可以随意改动它里面的任意一个局部
TimeZone类
import java.util.Calendar;
import java.util.TimeZone;
public class Demo {
public static void main(String[] args){
Calendar calendar = Calendar.getInstance();
//创建TimeZone的对象有两个方式:
//TimeZone tz = TimeZone.getDefault();//第一个方式
TimeZone tz = calendar.getTimeZone();//第二种方式
//TimeZone有两个方法
System.out.println(tz.getID());
System.out.println(tz.getDisplayName());
}
}