在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)第一个构造函数使用当前日期和时间来初始化对象:
<span style="font-size:18px;">Date( )</span>
2)第二个构造函数接收一个参数,该参数是从1970年1月1日起的微秒数:
<span style="font-size:18px;">Date(long millisec)</span>
Date对象创建以后,可以调用下面的方法:
我们来看下Date类的使用,Java中获取当前日期和时间很简单,使用Date对象的toString()方法来打印当前日期和
时间,如下所示:
实例代码为:
<span style="font-size:18px;">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()); } }</span>使用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类
来对日期时间进行格式化,如可以将日期转换为指定格式的文本,也可将文本转换为日期。
实例代码为:
<span style="font-size:18px;">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); } }</span>代码中的"yyyy-MM-dd HH:mm:ss"为预定义格式化字符串, yyyy表示四位年, MM表示两位月份,dd表示两位日
期,HH表示小时(使用24小时制), mm表示分钟, ss表示秒,这样就指定了转换的目标格式,最后调用format()方法
将时间转换为指定的格式的字符串。
运行结果:
实例代码:
<span style="font-size:18px;">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); } }</span>代码中的"yyyy年MM月dd日 HH:mm:ss"指定了字符串的日期格式,调用parse()方法将文本转换为日期。
运行结果:
1)调用SimpleDateFormat对象的parse()方法时可能会出现转换异常,即ParseException,因此需要进行异常处
理,因此这个方法并不会经常使用。
2)使用Date类时需要导入java.util包,使用SimpleDateFormat时需要导入java.text包。
实例代码:
<span style="font-size:18px;">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); } }</span>运行结果:
Date类最主要的作用就是获得当前时间,同时这个类里面也具有设置时间以及一些其他的功能,但是由于本身设
计的问题,这些方法却遭到众多批评,不建议使用,更推荐使用Calendar类进行时间和日期的处理。
java.util.Calendar类是一个抽象类,可以通过调用getInstance()静态方法获取一个 Calendar对象,此对象已由当
前日期时间初始化,即默认代表当前时间,创建一个代表系统当前日期的Calendar对象,如:
<span style="font-size:18px;">Calendar c = Calendar.getInstance();//默认是当前日期</span>
Calendar类中用一下这些常量表示不同的意义,jdk内的很多类其实都是采用的这种思想:
那么如何使用Calendar获取年、月、日、时间等信息呢?我们来看下面的代码:<span style="font-size:18px;">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); } }</span>其中,调用Calendar类的getInstance()方法获取一个实例,然后通过调用get()方法获取日期时间信息,参数为需
要获得的字段的值,Calendar.Year等为Calendar类中定义的静态常量。
运行结果:
Calendar类提供了getTime()方法,用来获取Date对象,完成Calendar和Date的转换,还可通过getTimeInMillis()
方法,获取此Calendar的时间值,以毫秒为单位。如下所示:
<span style="font-size:18px;">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); } }</span>运行结果: 实例代码:
<span style="font-size:18px;">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); } }</span>运行结果: