java中时间时期总结

java中时间类简介:
JAVA中提供了3个日期类:分别是Date、Calendar和DateFormat(和他的子类SimpleDateFormat),DateFomat类在java.text包中,Date和Calendar类在java.util包中。
Date()方法作用:主要用于创建日期对象并获取日期;
Calendar()方法作用:主要用于获取和设置日期;
DateFormat()方法作用:主要用于创建日期格式化器,然后再由格式化器将日期转换为各种日期格式串输出。
————————————————-我们将讨论下面的类:————————————–

一、Date类:具体类(和抽象类相对)java.util.Date
java.util.Date类用于封装日期及时间信息,一般仅用它显示某个日期,不对他作任何操作处理,作处理用Calendar类,计算方便。原因是Date 类从Java 开发包(JDK) 1.0 就开始进化, 当时它只包含了几个取得或者设置一个日期数据的各个部分的方法, 比如说月, 日, 和年. 这些方法现在遭到了批评并且已经被转移到了Calendar类里去了。

 Date date=new Date();//创建一个Date实例,默认的构造方法创建的日期代表当前系统时间,
                      //用毫秒表示当前时间是:System.currentTimeMillis()
 System.out.println(date);//只要输出的不是类名@hashcode值,就说明它重写过toString()
 long time=date.getTime();//查看date内部的毫秒值(date转毫秒)
 date.setTime(time+1000*60*60*24);//设置毫秒数让一个时间Date表示一天后的当前时间(任然是毫秒数)

二、DateFormat类:抽象类java.text.DateFormat

用DateFormat格式化当前date时间
Date today = new Date();                                        //输出:Fri May 02 13:29:32 CST 2003 
/*用DateFormat类显示各种日期格式*/
DateFormat.getDateInstance().format(today);                     //输出:2003-5-2 
DateFormat.getDateInstance(DateFormat.LONG,Locale.CHINA).format(today);   //输出:2003年5月2日 
DateFormat.getDateInstance(DateFormat.MEDIUM,Locale.CHINA).format(today); //输出:2003-5-2 
DateFormat.getDateInstance(DateFormat.SHORT,Locale.CHINA).format(today);  //输出: 03-5-2  
/*用DateFormat类显示各种时间格式*/
DateFormat.getTimeInstance().format(today)= 13:29:32 
DateFormat.getTimeInstance(DateFormat.LONG,Locale.CHINA).format(today)//输出:下午012932秒 
DateFormat.getTimeInstance(DateFormat.MEDIUM,Locale.CHINA).format(today)//输出:13:29:32 
DateFormat.getTimeInstance(DateFormat.SHORT,Locale.CHINA).format(today)//输出:下午1:29 
/*用DateFormat类显示各种日期+时间格式*/ 
DateFormat.getDateTimeInstance( DateFormat.SHORT, DateFormat.SHORT).format(today)
//输出:9/29/01 8:44 PM 
DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM).format(today) 
//输出:Sep 29, 2001 8:44:45 PM 
DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG).format(today) 
//输出:September 29, 2001 8:44:45 PM EDT 
DateFormat.getDateTimeInstance(DateFormat.FULL,DateFormat.FULL);
//输出:Saturday, September 29, 2001 8:44:45 PM EDT 

三、 和它的一个具体子类,java.text.SimpleDateFormat

假如我们希望定制日期数据的格式, 比方星期六-9月-29日-2001年. 下面的例子展示了如何完成这个工作:

import java.text.SimpleDateFormat; 
import java.util.Date; 

public class DateExample2 { 
    public static void main(String[] args) { 
        SimpleDateFormat bartDateFormat = new SimpleDateFormat("EEEE-MMMM-dd-yyyy"); 
        Date date = new Date(); 
        System.out.println(bartDateFormat.format(date)); 
    } 
} 

注:只要通过向SimpleDateFormat 的构造函数传递格式字符串”EEE-MMMM-dd-yyyy”, 我们就能够指明自己想要的格式. 你应该可以看见, 格式字符串中的ASCII 字符告诉格式化函数下面显示日期数据的哪一个部分. EEEE是星期, MMMM是月, dd是日, yyyy是年. 字符的个数决定了日期是如何格式化的.传递”EE-MM-dd-yy”会显示 Sat-09-29-01. 请察看Sun 公司的Web 站点获取日期格式化选项的完整的指示.
(3)、抽象类java.util.Calendar 和它的一个具体子类,java.util.GregorianCalendar
将文本数据解析成日期对象

假设我们有一个文本字符串包含了一个格式化了的日期对象, 而我们希望解析这个字符串并从文本日期数据创建一个日期对象. 我们将再次以格式化字符串”MM-dd-yyyy” 调用SimpleDateFormat类, 但是这一次, 我们使用格式化解析而不是生成一个文本日期数据. 我们的例子, 显示在下面, 将解析文本字符串”9-29-2001”并创建一个值为001736000000 的日期对象.

例子程序:

import java.text.SimpleDateFormat; 
import java.util.Date; 

public class DateExample3 { 

public static void main(String[] args) { 
// Create a date formatter that can parse dates of 
// the form MM-dd-yyyy. 
SimpleDateFormat bartDateFormat = 
new SimpleDateFormat("MM-dd-yyyy"); 

// Create a string containing a text date to be parsed. 
String dateStringToParse = "9-29-2001"; 

try { 
// Parse the text version of the date. 
// We have to perform the parse method in a 
// try-catch construct in case dateStringToParse 
// does not contain a date in the format we are expecting. 
Date date = bartDateFormat.parse(dateStringToParse); 

// Now send the parsed date as a long value 
// to the system output. 
System.out.println(date.getTime()); 
} 
catch (Exception ex) { 
System.out.println(ex.getMessage()); 
} 
} 
} 

四、Calendar类
java.util.Calendar类用于封装日历信息,其主作用在于其方法可以对时间分量进行运算
类型描述(解释)
1)通过Calendar的静态方法获取一个实例该方法会根据当前系统所在地区来自行决定时区,帮我们创建Calendar实例,这里要注意,实际上根据不同的地区,Calendar有若干个子类实现。而Calendar本身是抽象类,不能被实例化!我们不需要关心创建的具体实例为哪个子类,我们只需要根据Calendar规定的方法来使用就可以了。
2)日历类所解决的根本问题是简化日期的计算,要想表示某个日期还应该使用Date类描述。Calendar是可以将其描述的时间转化为Date的,我们只需要调用其getTime()方法就可以获取描述的日期的Date对象了。

Calendar的属性基本使用

public void getDate(){
    Calendar calender = Calendar.getInstance();
    输出cd属性值:
    calendar.get(Calendar.YEAR);                //显示年份
    calendar.get(Calendar.MONTH);               //显示月份
    calendar.get(Calendar.MONTH)+1             //月从0开始,这里的计算显示当前月份
    calendar.get(Calender.DATE)                 //显示日期
    calendar.get(Calendar.DAY_OF_MONTH)         //显示日期(和上面一样)
    calendar.get(Calender.HOUR)                 //显示小时(12小时制的小时数)
    calendar.get(Calender.HOUR_OF_DAY)          //显示小时(24小时制的小时数)
    calendar.get(Calender.MINUTE)               //显示分钟
    calendar.get(Calender.SECOND)               //显示秒
    calendar.get(Calender.MILLISECOND)          //显示毫秒

    calendar.get(Calender.DAY_OF_WEEK)-1        //星期几(在Calendar类中,周日是1,周一是2,周二是3)
    calendar.get(Calender.DAY_OF_MONTH)         //本月中的第几天
    calendar.get(Calendar.DAY_OF_YEAR);          //今年的第 N 天

    calendar.get(Calender.WEEK_OF_YEAR)         //表示今年的第几周
    calendar.get(Calender.WEEK_OF_MONTH)        //本月中的第几周
    calendar.getActualMaximum(Calendar.DAY_OF_MONTH) //获取当月中天数的最大值 即当月的日期数 
}

注: (1)获取值必须放在calendar.get()中
(2)返回值都是int,如果小于10,不显示前面的0

Calendar的方法基本使用
(1)add方法:public abstract void add(int field,int amount)
该方法的作用是在Calendar对象中的某个字段上增加或减少一定的数值,增加是amount的值为正,减少时amount的值为负。
例:在计算一下当前时间100天以后的日期,代码如下:

  Calendar c = Calendar.getInstance();        //创建实例
  c.add(Calendar.DATE, 100);                  //给当前时间加100天
  int year = c.get(Calendar.YEAR);            //输出加100天后的年
  int month = c.get(Calendar.MONTH) + 1;      //输出加100天后的月
  int date = c.get(Calendar.DATE);            //输出加100天后的日
  System.out.println(year + "年" + month + "月" + date + "日");//输出加100天后的时间
其他的添加时间的格式
c.add(Calendar.DATE, 10);                     //把当前日期加上10天  
将Calendar.DATE分别换成YEAR MONTH DATE HOUR_OF_DAY MINUTE SECOND MILLISECOND都会在这基础上加10年 十个月 十天等。。。

(2)after方法+before方法:public boolean after(Object when)
该方法的作用是判断当前日期对象是否在when对象的后面,如果在when对象的后面则返回true,否则返回false。
例如:

Calendar c4 = Calendar.getInstance();
c4.set(2009, 10 - 1, 10);
Calendar c5 = Calendar.getInstance();
c5.set(2010, 10 - 1, 10);
boolean b = c5.after(c4);   //因为c5在c4之后,所以返回true,即b = true
boolean a = c4.before(c5);   //因为c4在c5之前,所以返回true,即a = true
System.out.println(b);

注:在该示例代码中对象c4代表的时间是2009年10月10号,对象c5代表的时间是2010年10月10号,
1)则对象c5代表的日期在c4代表的日期之后,所以after方法的返回值是true。
2)则对象c4代表的日期在c5代表的日期之前,所以before方法的返回值是true。

(3)getTime方法+Date的setTime方法 :Calendar和date的转换
public final Date getTime()
该方法的作用是将Calendar类型的对象转换为对应的Date类对象,两者代表相同的时间点。
public final void setTime(Date date)
类似的方法是setTime,该方法的作用是将Date对象转换为对应的Calendar对象。
转换的示例代码如下:

Date d = new Date();
Calendar c6 = Calendar.getInstance();
//Calendar类型的对象转换为Date对象
Date d1 = c6.getTime();
//Date类型的对象转换为Calendar对象
Calendar c7 = Calendar.getInstance();
c7.setTime(d);

(4)getTimeInMillis()方法+setTimeInMillis()方法: Calendar和毫秒的转换

//将Calendar对象转换为相对时间(毫秒数)
Calendar c8 = Calendar.getInstance();
long t1 = c8.getTimeInMillis();
//将相对时间(毫秒数)转换为Calendar对象
Calendar c9 = Calendar.getInstance();
long t = 1252785271098L;
c9.setTimeInMillis(t);

在转换时,使用Calendar类中的getTimeInMillis方法可以将Calendar对象转换为相对时间。在将相对时间转换为Calendar对象时,首先创建一个Calendar对象,然后再使用Calendar类的setTimeInMillis方法设置时间即可。

(5)set()方法:用来设置或修改时间
//设置日期和时间
c.set(2012, 11, 23); //设置时间为2012年11月23号
c.set(Calendar.HOUR, 10); //设置小时为10,即表示10点
c.set(Calendar.MINUTE, 4); //设置分钟为4分钟
c.set(Calendar.SECOND, 54); //设置秒为54秒
(6)compareTo:用来比较两个时间的大小

// 创建一个 Calendar 用于比较时间  
Calendar calendarNew = Calendar.getInstance();  
// 设定为 5 小时以前,后者大,显示 -1  
calendarNew.add(Calendar.HOUR, -5);  
System.out.println("时间比较:" + calendarNew.compareTo(calendar));  //输出:时间比较:-1
// 设定7小时以后,前者大,显示 1  
calendarNew.add(Calendar.HOUR, +7);  
System.out.println("时间比较:" + calendarNew.compareTo(calendar));  //输出:时间比较:1
// 退回 2 小时,时间相同,显示 0  
calendarNew.add(Calendar.HOUR, -2);  
System.out.println("时间比较:" + calendarNew.compareTo(calendar));   //输出:时间比较:0

(7)roll()方法:和add方法的功能类似,不同的是roll()方法在本月内循环,月不改变,而add()方法添加超过当月的天数,月会发生改变
例:
Calendar calendar = Calendar.getInstance();
cal.set(2015,10,3);
cal.roll(Calendar.DATE, -4);
date=cal.getTime();
System.out.println(df.format(date)); //输出:2015-10-30
cal.add(Calendar.DATE, 4);
date=cal.getTime();
System.out.println(df.format(date)); //输出:2015-11-3

五、时间掌握在你的手里

有了这些Date 和Calendar 类的例子, 你应该能够使用 java.util.Date, java.text.SimpleDateFormat, 和 java.util.GregorianCalendar 创建许多方法了.

在下面的文章中, 我们将讨论更高级的Date 和 Calendar 类的使用技巧, 包括时区和国际化的格式. 我们还会考察两个日期类 java.sql.Date 和 java.util.Date 之间的区别.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值