在Java程序中与日期相关的类包括java.util.Date类、java.text.SimpleDateFormat类、java.util.calendar类和
java.util.GregorianCalendar类。在这里我们只是简单地介绍Date类、SimpleDateFormat类和calendar类的使用。
在程序开发中,经常需要处理日期和时间的相关数据,此时我们可以使用java.util包中的Date类。这个类最主要
的作用就是获取当前时间。java.util包提供了Date类来封装当前的日期和时间。
Date类提供两个构造函数来实例化Date对象:
1)第一个构造函数使用当前日期和时间来初始化对象:
Date( )
2)第二个构造函数接收一个参数,该参数是从1970年1月1日起的微秒数:
Date(long millisec)
Date对象创建以后,可以调用下面的方法:
我们来看下Date类的使用,Java中获取当前日期和时间很简单,使用Date对象的toString()方法来打印当前日期和
时间,如下所示:
实例代码为:
import java.util.*;
public class Test{
public static void main(String[] args){
//初始化Date对象
Date d = new Date();
//直接输出日期时间
System.out.println(d);
//使用toString()函数显示日期时间
System.out.println(d.toString());
}
}
使用Date类的默认无参构造方法创建出的对象就代表当前时间,我们可以直接输出Date对象显示当前的时间,也
可以使用Date对象的toString()方法来打印当前日期和时间显示的结果如下:
其中,Mon代表Monday(星期一), Mar代表March(三月),28代表28号, CST代表China Standard Time(中国标准时间,也就是北京时间,东八区),2016代表2016年。
Java使用以下三种方法来比较两个日期:
1)使用getTime( )方法获取两个日期(自1970年1月1日经历的微妙数值),然后比较这两个值。
2)使用方法before(),after()和equals()。例如,一个月的12号比18号早,则new Date(99, 2, 12).before(new Date
(99, 2, 18))返回true。
3)使用compareTo()方法,它是由Comparable接口定义的,Date类实现了这个接口。
从上面的输出结果中,我们发现,默认的时间格式不是很友好,与我们日常看到的日期格式不太一样,如果想要
按指定的格式进行显示,如2016-03-11 09:22:30 ,那该怎么做呢?
SimpleDateFormat类是一个以语言环境敏感的方式来格式化和分析日期的类。SimpleDateFormat类允许你选择任
何用户自定义日期时间格式来运行。此时就到了java.text包中的SimpleDateFormat类,可以使用 SimpleDateFormat类
来对日期时间进行格式化,如可以将日期转换为指定格式的文本,也可将文本转换为日期。
实例代码为:
import java.util.*;
import java.text.*;
public class Test{
public static void main(String[] args) throws ParseException{
//创建日期格式的字符串
Date d = new Date();
//创建SimpleDateFormat对象,指定目标格式
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//调用format()方法,格式化时间,转换为指定格式字符串
String day = sdf.format(d);
//输出转换后的字符串
System.out.println("当前时间:"+ day);
}
}
代码中的"yyyy-MM-dd HH:mm:ss"为预定义格式化字符串, yyyy表示四位年, MM表示两位月份,dd表示两位日
期,HH表示小时(使用24小时制), mm表示分钟, ss表示秒,这样就指定了转换的目标格式,最后调用format()方法
将时间转换为指定的格式的字符串。
运行结果:
实例代码:
import java.util.*;
import java.text.*;
public class Test{
public static void main(String[] args) throws ParseException{
//创建日期格式的字符串
String day = "2016年03月01日 10:30:25";
//创建SimpleDateFormat对象,指定目标格式
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
//调用parse()方法,将字符串转换为日期
Date date = sdf.parse(day);
//输出转换后的字符串
System.out.println(date);
}
}
代码中的"yyyy年MM月dd日 HH:mm:ss"指定了字符串的日期格式,调用parse()方法将文本转换为日期。
运行结果:
1)调用SimpleDateFormat对象的parse()方法时可能会出现转换异常,即ParseException,因此需要进行异常处
理,因此这个方法并不会经常使用。
2)使用Date类时需要导入java.util包,使用SimpleDateFormat时需要导入java.text包。
实例代码:
import java.util.*;
import java.text.*;
public class Test{
public static void main(String[] args) throws ParseException{
//使用format()方法将日期转换为指定格式的文本
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy/MM/dd HH:mm");
SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//创建Date对象,表示当前时间
Date now=new Date();
//调用format()方法,将日期转换为字符串并输出
System.out.println(sdf1.format(now));
System.out.println(sdf2.format(now));
System.out.println(sdf3.format(now));
//使用parse(方法将文本转换为日期
String d = "2016-3-1 21:05:36";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//调用parse()方法,将字符串转换为日期
Date date = sdf.parse(d);
System.out.println(date);
}
}
运行结果:
Date类最主要的作用就是获得当前时间,同时这个类里面也具有设置时间以及一些其他的功能,但是由于本身设
计的问题,这些方法却遭到众多批评,不建议使用,更推荐使用Calendar类进行时间和日期的处理。
java.util.Calendar类是一个抽象类,可以通过调用getInstance()静态方法获取一个 Calendar对象,此对象已由当
前日期时间初始化,即默认代表当前时间,创建一个代表系统当前日期的Calendar对象,如:
Calendar c = Calendar.getInstance();//默认是当前日期
Calendar类中用一下这些常量表示不同的意义,jdk内的很多类其实都是采用的这种思想:
那么如何使用Calendar获取年、月、日、时间等信息呢?我们来看下面的代码:import java.util.*;
public class Test{
public static void main(String[] args){
//创建Calendar对象
Calendar c = Calendar.getInstance();
//获取年
int year = c.get(Calendar.YEAR);
//获取月份,0表示1月份
int month = c.get(Calendar.MONTH);
//获取日期
int day = c.get(Calendar.DAY_OF_MONTH);
//获取小时
int hour = c.get(Calendar.HOUR_OF_DAY);
//获取分钟
int minute = c.get(Calendar.MINUTE);
//获取秒
int second = c.get(Calendar.SECOND);
//输出结果
System.out.println("当前时间:"+ year + "-" + (month+1) + "-" + day + " " + hour + ":" + minute + ":" + second);
}
}
其中,调用Calendar类的getInstance()方法获取一个实例,然后通过调用get()方法获取日期时间信息,参数为需
要获得的字段的值,Calendar.Year等为Calendar类中定义的静态常量。
运行结果:
Calendar类提供了getTime()方法,用来获取Date对象,完成Calendar和Date的转换,还可通过getTimeInMillis()
方法,获取此Calendar的时间值,以毫秒为单位。如下所示:
import java.util.*;
public class Test{
public static void main(String[] args){
//创建Calendar对象
Calendar c = Calendar.getInstance();
//将Calendar对象转换为Date对象
Date date = c.getTime();
//获取当前秒数
Long time = c.getTimeInMillis();
//输出结果
System.out.println("当前时间:"+ date);
System.out.println("当前毫秒数:"+ time);
}
}
运行结果:
实例代码:
import java.util.*;
import java.text.*;
public class Test{
public static void main(String[] args){
//创建Canlendar对象
Calendar c = Calendar.getInstance();
//将Calendar对象转换为Date对象
Date date = c.getTime();
//创建SimpleDateFormat对象,指定目标格式
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//将日期转换为指定格式的字符串
String now = sdf.format(date);
System.out.println("当前时间:" + now);
}
}
运行结果: