一、Date类
1.Date类时Java里面进行日期操作的常用类,Date类用来表示特定的瞬间,精确到毫秒。
2.常用方法
public boolean after(Date when)
测试此日期是否在指定日期之后
public boolean before(Date when)
测试此日期是否在指定日期之前
getTime()方法返回自1970年1月1日00:00:00 GMT以来此Date对象表示的毫秒数。
示例
简单的性能测试:监控一段代码运行所需要的时间。
/**
* Date类的getTime()方法返回Date对象自1970年1月1日00:00:00 GMT以来的毫秒数。
*/
import java.util.*;
public class DateTest1{
public static void main(String[] args){
long time1 = new Date().getTime();//获取此时的时间
int sum = 0;
for(int i = 1; i <= 100000000; i++){
sum += i;
}
long time2 = new Date().getTime();//获取此时的时间
System.out.println(time1);
System.out.println(time2);
System.out.println(time2 - time1);
Date d = new Date();
System.out.println(d);
}
}
二、DateFormat类和SimpleDateFormat类
Date对象表示时间的默认顺序是星期、月、日、小时、秒、年,例如
Mon June 8 21:01:01 CST 2016
我们如果希望用某个习惯的格式来输出时间,例如时间的顺序:年、月、日、星期。可以用java.text包中的DateFormat类,是日期/ 时间格式化子类的抽象类。日期/时间格式化子类(如SimpleDateFormat)允许进行格式化(即日期转换成文本)、解析(文本转换成日期)和标准化。
1.日期和时间模式
日期和时间格式由日期和时间模式字符串指定。A-Z、a-z被解释成模式字母,文本用单引号引起来,以免进行解释。其他字符均不解释。
Java中定义了以下模式字母(其他字母都被保留)
G Era标志符 例:AD
y 年
M 年中的月份
w 年中的周数
W 月份中的周数
D 年中的天数
d 月份中的天数
F 月份中的星期
E 星期中的天数
a am/pm标记 例:PM
H 一天中的小时数(0-23)
k 一天中的小时数(1-24)
K am/pm中的小时数(0-11)
h am/pm中的小时数(1-12)
m 小时中的分钟数
s 分钟中的秒数
S 毫秒数
z 时区 例:Pacific Standard Time;PST;GMT-08:00
Z 时区 例:-0800
2.示例
/**
* DateFormat 和SimpleDateFormat
* 常用方法parse()和format()
*/
import java.util.Date;
import java.text.ParseException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
public class DateMethods{
public static void main(String[] args){
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
Date d = new Date();
String str = df.format(d);//转化为我们熟悉的时间格式,解析文本
System.out.println(d);
System.out.println(str);
try{
Date d2 = df.parse(str);//将一个Date格式化为日期/时间字符串
Date d3 = df.parse("1993-9-31 09:09:01 999");
System.out.println(d2);
System.out.println(d3);
}catch(ParseException e){ //表示解析时出现意外错误
e.printStackTrace();
}
}
}
3.说明
JDK文档上的Date的毫秒值,是相对于格林威治时间1970年1月1日0点,但实际测试,这个Date跟时区相关,在中国这个基准值是1970年1月1日8点。示例如下
/**
* 获得基准时间,Date的基准时间跟时区有关,中国的基准值是
* 1970年1月1日8点
*/
import java.text.*;
import java.util.*;
public class ReferenceTime{
public static void main(String[] args){
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
Date d = new Date(0L);//把时间设为0,表示到基准时间
String str = df.format(d);
System.out.println(str);
}
}
三、Calendar类
java.util包中的Calendar类是java里另外一个常用的日期处理的类,是一个抽象类。
1.初始化
Calendar c = Calendar.getInstance();
2.使用Calendar对日期进行部分析取和进行日期运算
示例
/**
* java.util包中的Calendar类
*/
import java.util.*;
public class CalendarTest{
public static void main(String[] args){
Calendar c = Calendar.getInstance();//通过静态方法getInstance()来获取Calendar实例
int year = c.get(Calendar.YEAR);//get()返回给定日历字段的值
int month = c.get(Calendar.MONTH) + 1;//MONTH比较特殊,从0开始,也就是0表示1月
int day = c.get(Calendar.DAY_OF_MONTH);
System.out.println("今天是 " + year + "年" + month + "月" + day + "日");
//add方法为给定的日历字段添加或减去指定的时间
c.add(Calendar.DATE,5);//当前日期加5天
c.add(Calendar.DATE,-5);//当前日期加5天
System.out.println("今天是" + c.get(Calendar.DAY_OF_MONTH) + "号");
}
}
3.为Calendar设置初始值
/**
* Calendar设置初始值
*/
import java.util.*;
public class CalendarOriginalValue{
public static void main(String[] args){
Calendar c = Calendar.getInstance();
c.setTimeInMillis(2234567890000L);//该方法作用是用long值设置Calendar的当前时间值
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH) + 1;
int day = c.get(Calendar.DAY_OF_MONTH);
System.out.println(year + "." + month + "." + day);
}
}