Java核心類庫——時間Date和Calendar


時間日期
1)java中的時間類有:DateCalendar

2)java中時間類的本質 long(毫秒數)
  Date = long +歷法算法(方法gerYear())
  Calendar = long +歷法算法(方法ger())

3) 時間的標准有兩種
 (1970)GMT long
 (0)UTC long
4) java中基本的時間表示GMT long
5) java提供了Date類型表示時間和日期
 Date 是long 類型的包裝
6) Calendar 是歷法的抽象
 歷法:公歷,農歷,太陽歷
7) GregorianCalendar是歷法的實現,采用公歷的算法實現的
 Calendar cal = Calendar.getInstance();
 Calendar cal = new GregorianCalendar();//除了日本和泰國,效果等同於上一句
8) Date和 Calendar的默認值就是系統當前時間

一 java中表示時間的方式:
1) 格林威治時間(GMT):1970年1月1日 00:00:00(注:中國是東八區,所以要+8個小時)
  也就是1970年1月1日 08:00:00
2 )公元元年(UTC): 0年
3 )目前java中3種日期表達方式long, Date , Calendar都在用

 1 例子
 2 import java.util.Calendar;
 3 import java.util.Date;
 4 import java.util.GregorianCalendar;
 5 
 6 public class LongDateDemo {
 7  public static void main(String[] args) {
 8   long now = System.currentTimeMillis();
 9   long year = now/1000/60/60/24/365 +1970;
10   System.out.println(year);
11   //一年 地球繞太陽一圈(365天+1/4天)
12   //原點(公元元年)
13   
14   /* date.getYear()是將date內部的long時間,根據歷法計算
15    * 為年份,返回值是2位數年份,如:1997年返回97,但是過了
16    * 2K年,返回3位數年份,如2012返回112
17    */
18   
19   //老板本
20   Date date = new Date();//默認是當前時間(long)
21   int y = date.getYear()+1900;
22   int month = date.getMonth()+1;
23   System.out.println(y+"年"+month+"月");
24   
25   //新版本
26   //Calendar 歷法
27   Calendar cal = new GregorianCalendar();//默認是當前時間(long)
28   y = cal.get(Calendar.YEAR);//2012
29   month = cal.get(Calendar.MONTH)+1;//4
30   System.out.println(y+"年"+month+"月");
31   
32   
33  }
34 
35 }

 


二 時間類型轉換  long <-> Date <-> Calendar
 long --->Date :  dat = new Date(l)
       dat.setTime(l)

 Date --->Calendar : cal.setTime(dat)

 

 Calendar ---> Date: cal.getTime()


 Date ---> long :dat.getTime()
 注:Date dat  ,  long l  ,Calendar cal

例子

 1 import java.util.Calendar;
 2 import java.util.Date;
 3 import java.util.GregorianCalendar;
 4 
 5 /**
 6  * 時間的類型轉換
 7  */
 8 public class DateCaseDemo {
 9  public static void main(String[] args) {
10   long gmt = 0;//格林威治時間 1970/01/01
11   
12   Date date = new Date();
13   date.setTime(gmt);//回到1970 元旦,相當於long -->Date
14   System.out.println(date.getYear()+1900);//1970
15   
16   Calendar cal = new GregorianCalendar();
17   //date --> cal
18   cal.setTime(date);//將cal設置為date的時間,也是1970
19   System.out.println(cal.get(Calendar.YEAR));//1970
20   //date 和 cal ,gmt 代表同一時刻
21   //加-1天,是在當前時間上加-1天,就是減少1天,就是減少1天的毫秒數(1000*60*60*24)
22   cal.add(Calendar.DAY_OF_YEAR,-1);
23   Date d = cal.getTime();
24   System.out.println(d);//1969
25   long l = d.getTime();
26   System.out.println(l);//-86400000,因為是在原點以前的時間
27 
28   
29  }
30 
31 }

 

三 時間的輸入與輸出
1)  日期輸出的本質是將Date轉換為格式化的String
2)  日期輸入的本質是將格式化的 String轉換為 Date
3)  SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
   構建SimpleDateFormat 一般提供日期的格式"yyyy-MM-dd"具體參看javadoc
    如:"yyyy-MM-dd HH:mm:ss"
     "yyyyMMdd"
     "dd/MM/yy"
     "MM/dd/yyyy"

常用方法

 fmt.parse(String)    可以實現將(合法)字符串解析為日期類型,經常用於處理日期輸入
 fmt.format(Date)     可以把日期格式化為字符串用於輸出處理

使用字符串String輸出時間

 Date ---> String:
  DateFormat fmt = new SimpleDateFormat("HH:mm:ss");
  fmt.format(date)

把字符串String時間轉為Date時間(個是必須相同)

 String --> Date :
  DateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");
  fmt.parse("1999-2-2")
注:java沒有提供String直接轉換為Calendar的API方法,但第三方提供的API有這種方法
 如果Calendar需要轉為String,必須先轉換為Date
 Calendar ----> Date :
  Date dat = cal.getTime();

例子

 1 import java.text.ParseException;
 2 import java.text.SimpleDateFormat;
 3 import java.util.Date;
 4 
 5 public class DateIODemo {
 6  public static void main(String[] args) throws ParseException {
 7   Date date = new Date();//當前時間,當前毫秒數
 8   //輸出yyyy-MM-dd HH:mm:ss
 9   SimpleDateFormat fmt = 
10    new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
11   //將日期類型格式化為時間字符串
12   String str = fmt.format(date);//日期格式化
13   System.out.println(str);//2012-12-21 00:00:00
14   //解析日期字符串為日期類型對象
15   String day = "2012-12-21";
16   SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd");
17   Date d = f.parse(day);//將日期字符串解析為毫秒數
18   long l = d.getTime();
19   System.out.println(fmt.format(d));
20   String s = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
21   System.out.println(s);//2012-04-18
22  }
23 
24 }

 

四 時間的計算
 時間計算的問題
 1) 本質是時間毫秒數的計算

 2) 簡單時間計算,直接計算毫秒數,如:3天以后,2小時等
 3) 復雜時間計算,利用Calender類提供的歷法算法實現
常用方法:
     add() set()
     Calendar 提供的方法本是上也是計算毫秒數, 

例子
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

public class DateCalDemo {
 public static void main(String[] args) {
  //簡單時間計算
  long l = System.currentTimeMillis();//當前時間
  l += 1000L*60*60*24*3;//3天以后
  SimpleDateFormat sdm = new SimpleDateFormat("yyyy-MM-dd");  
  String s = sdm.format(new Date(l));
  System.out.println(s);
  //復雜時間計算
  Calendar cal = new GregorianCalendar();
  cal.add(Calendar.YEAR, 2);//2年以后
  cal.set(Calendar.MONTH,Calendar.JANUARY);//設置月份為1月
  System.out.println(sdm.format(cal.getTime()));//2年以后的1月
  
 }
}

例子2
package com.tarena.day16;

import java.util.Calendar;
import java.util.Date;

public class SpecialDateDemo {
 public static void main(String[] args) {
  
 }
 /**
  * 計算商品的促銷日期special Date,規則:商品過期前兩周五促銷 
  * @param creat
  * @param months
  * @return
  */
 public static Date special(Date creat,int months){
  Calendar cal = Calendar.getInstance();
  cal.setTime(creat); //生產日期
  cal.add(Calendar.MONTH, months);  //過期日
  cal.add(Calendar.WEEK_OF_YEAR, -2);  //回調2周
  if(cal.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY){//如果是星期天
   cal.add(Calendar.WEEK_OF_YEAR, -1);//回調一周
   cal.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY);//調到本周的周五
  }
  return cal.getTime();
 }

}

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM