java中各種時間格式的轉化

來源:互聯網
上載者:User

時間和日期中常用到的幾個類:

java.util.Date,
java.util.Calendar,
java.util.GregorainCalendar,
java.text.DateFormat,
java.text.SimpleDateFormat

java.util.Date :

表示特定瞬間,精確到毫秒
一天是 24 * 60 * 60 = 86400 秒
世界時(UT 或 UTC) , 格林威治時間 (GMT), 格林威治時(GMT)和世界時(UT)
是相等的,格林威治時(GMT) 是標準的"民間"稱呼, 世界時(UT) 是相同標準的
科學稱呼。UTC 和 UT 的區別是:UTC 是基於原子時鐘的,UT 是基於天體觀察的。
(中文版的jdk 真是好啊,跟科普教材是的,呵呵)

常用的構造方法 :

Date();

Date(long date)

(long date) 表示從標準基準時間(稱為 "曆元" epoch ,即 1970.1.1
00:00:00 GMT)經曆的毫秒數。

還有一些構造方法已經 deprecated 了

主要的方法:(介紹幾個常用的,詳細的查詢 jdk 文檔)

boolean after(Date when) 測試日期在此日期之後。

boolean before(Date when) 測試日期在此日期之前。

Object clone() 返回此對象的副本

long getTime() 返回自 1970.1.1 00:00:00 GMT 後,此對象表示的毫秒數

void setTime(long time) 設定此 Date 對象,以表示 1970 年 1 月 1 日
00:00:00 GMT 以後 time 毫秒的時間點。

String toString() 將 Date 對象轉化成以下形式的
String:dow mon dd hh:mm:ss zzz yyyy

其中: dow 是一周中的某一天 (Sun, Mon, Tue, Wed, Thu, Fri, Sat)。
dow 是一周中的某一天 (Sun, Mon, Tue, Wed, Thu, Fri, Sat)。
mon 是月份 (Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep,
Oct, Nov, Dec)。

dd 是一月中的某一天(01 至 31),顯示為兩位十進位數。
hh 是一天中的小時(00 至 23),顯示為兩位十進位數。
mm 是小時中的分鐘(00 至 59),顯示為兩位十進位數。
ss 是分鐘中的秒數(00 至 61),顯示為兩位十進位數。 60,61 是因為有"潤秒"
zzz 是時區(並可以反映夏令時)。標準時區縮寫包括方法 parse 識別的時區縮寫。
如果不提供時區資訊,則 zzz 為空白,即根本不包括任何字元。
yyyy 是年份,顯示為 4 位十進位數。

使用 System.currentTimeMillis() 獲得當前系統時間的毫秒數

java.util.Calendar :

Calendar 類是一個抽象類別.

Calendar rightNow = Calendar.getInstance();

可以使用三種方法更改日曆欄位:set()、add() 和 roll()。

set(f, value) 將日曆欄位 f 更改為 value。
此外,它設定了一個內部成員變數,以指示日曆欄位 f 已經被更改。儘管日曆欄位
f 是立即更改的,但是直到下次調用 get()、getTime()、getTimeInMillis()、
add() 或 roll() 時才會重新計算日曆的時間值(以毫秒為單位)。因此,多次調
用 set() 不會觸發多次不必要的計算。

add(f, delta) 將 delta 添加到 f 欄位中。這等同於調用
set(f, get(f) + delta)

roll(f, delta) 將 delta 添加到 f 欄位中,但不更改更大的欄位。

java.util.GregorianCalendar:
GregorianCalendar 是 Calendar 的一個具體子類,提供了世界上大多數國家
使用的標準日曆系統。

java.text.DateFormat:
DateFormat 是日期/時間格式化子類的抽象類別,它以與語言無關的方式格式化並
分析日期或時間。

java.text.SimpleDateFormat:

SimpleDateFormat 是一個以與語言環境相關的方式來格式化和分析日期的具體類。
它允許進行格式化(日期 -> 文本)、分析(文本 -> 日期)和正常化。

SimpleDateFormat 使得可以選擇任何使用者定義的日期-時間格式的模式。但是,
仍然建議通過 DateFormat 中的 getTimeInstance、getDateInstance 或
getDateTimeInstance 來新的建立日期-時間格式化程式。每一個這樣的類方法
都能夠返回一個以預設格式模式初始化的日期/時間格式化程式。可以根據需要使用
applyPattern 方法來修改格式模式。

日期和時間格式由日期和時間模式 字串指定。
在日期和時間模式字串中,未加引號的字母 'A' 到 'Z' 和 'a' 到 'z'
被解釋為模式字母,用來表示日期或時間字串元素。

 

引用

字母 日期或時間元素 表示 樣本
G Era 標誌符 Text AD
y 年 Year 1996; 96
M 年中的月份 Month July; Jul; 07
w 年中的周數 Number 27
W 月份中的周數 Number 2
D 年中的天數 Number 189
d 月份中的天數 Number 10
F 月份中的星期 Number 2
E 星期中的天數 Text Tuesday; Tue
a Am/pm 標記 Text PM
H 一天中的小時數(0-23) Number 0
k 一天中的小時數(1-24) Number 24
K am/pm 中的小時數(0-11) Number 0
h am/pm 中的小時數(1-12) Number 12
m 小時中的分鐘數 Number 30
s 分鐘中的秒數 Number 55
S 毫秒數 Number 978
z 時區 General time zone Pacific Standard Time; PST; GMT-08:00
Z 時區 RFC 822 time zone -0800

 

 

 

引用

日期和時間模式 結果
"yyyy.MM.dd G 'at' HH:mm:ss z" 2001.07.04 AD at 12:08:56 PDT
"EEE, MMM d, ''yy" Wed, Jul 4, '01
"h:mm a" 12:08 PM
"hh 'o''clock' a, zzzz" 12 o'clock PM, Pacific Daylight Time
"K:mm a, z" 0:08 PM, PDT
"yyyyy.MMMMM.dd GGG hh:mm aaa" 02001.July.04 AD 12:08 PM
"EEE, d MMM yyyy HH:mm:ss Z" Wed, 4 Jul 2001 12:08:56 -0700
"yyMMddHHmmssZ" 010704120856-0700
"yyyy-MM-dd'T'HH:mm:ss.SSSZ" 2001-07-04T12:08:56.235-0700

 

獲得當前系統的毫秒數:

代碼
package org.lokvin.example.calendar;   
  
public class CalendarExample1 {   
       
    public static void main(String[] args) {   
           
        java.util.Date date = new java.util.Date();   
        //獲得當前系統的毫秒數,自 1970.1.1 00:00:00 GMT   
        long time = System.currentTimeMillis();   
        java.util.Date date1 = new java.util.Date(time);   
        System.out.println("date = " + date.toString());   
        System.out.println("millisecond = " + time);   
        System.out.println("date1 = " + date1.toString());     
    }   
  
}   

運行結果:

引用

date = Mon Dec 04 16:01:16 CST 2006
millisecond = 1165219276771
date1 = Mon Dec 04 16:01:16 CST 2006

 

 

代碼
package org.lokvin.example.calendar;   
  
import java.util.Calendar;   
import java.util.GregorianCalendar;   
  
public class CalendarExample2 {   
       
    public static void main(String[] args) {   
        //獲得當前日期   
        Calendar calendar = Calendar.getInstance();   
        int era = calendar.get(Calendar.ERA);// 0 = BC, 1 = AD   
        System.out.println("ERA = " + era);   
        int year = calendar.get(Calendar.YEAR); //2006   
        System.out.println("YEAR = " + year);   
        int month = calendar.get(Calendar.MONTH);   
        //獲得當前月份, 0..11 表示 JAN..DEC   
        System.out.println("Month = " + month);//0 = JAN ... 11 = DEC   
        int day = calendar.get(Calendar.DAY_OF_MONTH);   
        System.out.println("Day of Month = " + day); // 1   
        //獲得日期在本周的天數, Sun=1, Mon=2 ... Sta=7   
        int day_of_week = calendar.get(Calendar.DAY_OF_WEEK);   
        System.out.println("Day of Week = " + day_of_week);   
           
        //獲得目前時間 12 時制是 Calendar.HOUR   
        int hour12 = calendar.get(Calendar.HOUR);   
        //獲得 AM ,PM , 0 = AM, 1 = PM   
        int ampm = calendar.get(Calendar.AM_PM);   
        System.out.println("hour 12 = " + hour12);   
        System.out.println("am pm = " + ampm); //0 = am , 1 = pm   
        //獲得目前時間 24 時制 Calendar.HOUR_OF_DAY   
        int hour24 = calendar.get(Calendar.HOUR_OF_DAY);   
        System.out.println("hour 24 = " + hour24);   
           
           
        Calendar today = new GregorianCalendar(2006, Calendar.DECEMBER, 4);   
        //Calendar.getInstance() 得到當前具體到毫秒的一個時間點   
        System.out.println("calendar = " + calendar.getTime().toString());   
        //通過 new GregorianCalendar(2006, Calendar.DECEMBER, 4)   
        //產生的 calendar 除了指定的年,月,日其餘為0(時分秒=0)   
        System.out.println("today = " + today.getTime().toString());   
           
           
    }   
  
}   
  

運行結果:

引用

ERA = 1
YEAR = 2006
Month = 11
Day of Month = 4
Day of Week = 2
hour 12 = 4
am pm = 1
hour 24 = 16
calendar = Mon Dec 04 16:22:42 CST 2006
today = Mon Dec 04 00:00:00 CST 2006

 

兩個日期之間的比較:

代碼
package org.lokvin.example.calendar;   
  
import java.util.Calendar;   
import java.util.GregorianCalendar;   
  
/*  
* 比較兩個 calendar 對象之間的先後  
*/  
public class CalendarExample3 {   
       
    public static void main(String[] args) {   
        //日期比較   
        Calendar xmas = new GregorianCalendar(2006, Calendar.DECEMBER, 25);   
        Calendar newYear = new GregorianCalendar(2007, Calendar.JANUARY, 1);   
           
        //比較兩個日期先後   
        boolean flag = xmas.before(newYear);   
        System.out.println("flag = " + flag);   
           
        flag = xmas.after(newYear);   
        System.out.println("flag = " + flag);   
           
        //兩個日期相差的毫秒數   
        long timeDiffMillis = newYear.getTimeInMillis() - xmas.getTimeInMillis();   
        System.out.println("time diff millis = " + timeDiffMillis);   
           
        //兩個日期相差的秒數   
        long diffSecs = timeDiffMillis / 1000;   
        System.out.println("time diff secs = " + diffSecs);   
           
        //兩個日期相差的分鐘   
        long diffMins = timeDiffMillis / (1000 * 60);   
        System.out.println("time diff mins = " + diffMins);   
           
        //兩個日期相差的小時   
        long diffHours = timeDiffMillis / (1000 * 60 * 60);   
        System.out.println("time diff hours = " + diffHours);   
           
        //兩個日期相差的天   
        long diffDays = timeDiffMillis / (1000 * 60 * 60 * 24);   
        System.out.println("time diff days = " + diffDays);   
               
    }   
  
}   

運行結果:

 

引用

flag = true
flag = false
time diff millis = 604800000
time diff secs = 604800
time diff mins = 10080
time diff hours = 168
time diff days = 7

 

 

使用Calendar 計算年齡:

 

代碼
package org.lokvin.example.calendar;   
  
import java.util.Calendar;   
import java.util.GregorianCalendar;   
  
/*  
* 計算年齡  
*/  
public class CalendarExample4 {   
      
    public static void main(String[] args) {   
        //建立生日的 Calendar 對象   
        Calendar birthDate = new GregorianCalendar(1979, Calendar.JULY, 7);   
        Calendar today = Calendar.getInstance();   
        int age = today.get(Calendar.YEAR) - birthDate.get(Calendar.YEAR);   
           
        //如果還沒有過生日,則 age - 1   
        birthDate.add(Calendar.YEAR, age);   
        if(today.before(birthDate)){   
            age--;   
        }   
        System.out.println("age = " + age);   
    }    
   
}   

判斷是否為閏年:

 

代碼
package org.lokvin.example.calendar;   
  
import java.util.GregorianCalendar;   
  
/*  
* 判斷是否為閏年 leap year  
*/  
public class CalendarExample5 {   
       
    public static void main(String[] args) {   
        //判斷是否"閏年" leap year   
        GregorianCalendar cal = new GregorianCalendar();   
        boolean isLeapYear = cal.isLeapYear(1998);   
        System.out.println("is leap year 1998 = " + isLeapYear);   
        isLeapYear = cal.isLeapYear(2000);   
        System.out.println("is leap year 2000 = " + isLeapYear);   
    }   
}   

運行結果 :

引用

is leap year 1998 = false
is leap year 2000 = true

 

獲得其他時區的時間:

代碼
package org.lokvin.example.calendar;   
  
import java.util.Calendar;   
import java.util.GregorianCalendar;   
import java.util.TimeZone;   
  
/*  
* 獲得其他時區目前時間  
*/  
  
public class CalendarExample6 {   
       
    public static void main(String[] args) {   
           
        Calendar cal = new GregorianCalendar();   
        int hour12 = cal.get(Calendar.HOUR);   
        int hour24 = cal.get(Calendar.HOUR_OF_DAY);   
        System.out.println("hour12 in our timezone = " + hour12);   
        System.out.println("hour24 in our timezone = " + hour24);   
           
        //獲得其他時區的目前時間,根據 zoneId 獲得時區   
        Calendar calJap = new GregorianCalendar(TimeZone.getTimeZone("Japan"));   
        hour12 = calJap.get(Calendar.HOUR);   
        System.out.println("hour12 in japs timezone = " + hour12);   
        hour24 = calJap.get(Calendar.HOUR_OF_DAY);   
        System.out.println("hour24 in japs timezone = " + hour24);   
           
        //獲得 zoneId 的列表   
        String[] zoneIds = TimeZone.getAvailableIDs();   
        for(int i=0; i<zoneIds.length; i++) {   
            String zoneId = zoneIds[i];   
            System.out.println("zone id = " + zoneId);   
        }   
    }   
}   
  

運行結果:

引用

hour12 in our timezone = 5
hour24 in our timezone = 17
hour12 in japs timezone = 6
hour24 in japs timezone = 18
zone id = Etc/GMT+12
zone id = Etc/GMT+11
zone id = MIT
zone id = Pacific/Apia
zone id = Pacific/Midway
...

格式化日期:

代碼
package org.lokvin.example.calendar;   
  
import java.text.DateFormat;   
import java.text.SimpleDateFormat;   
import java.util.Date;   
  
public class DateForamExample {   
    public static void main(String[] args) {   
        Date rightNow = new Date();   
        DateFormat format1 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");   
        DateFormat format2 = new SimpleDateFormat("yyyy-MM-dd");   
        DateFormat format3 = new SimpleDateFormat("h:mm a");   
        DateFormat format4 = new SimpleDateFormat("yyyy.MM.dd G 'at' HH:mm:ss z");   
        DateFormat format5 = new SimpleDateFormat("EEE, MMM, dd, ''yyyy");   
        DateFormat format6 = new SimpleDateFormat("yyyy.MM.dd kk:mm 'o''clock' a, zzzz");   
        DateFormat format7 = new SimpleDateFormat("yyyyy.MMMMM.dd GGG hh:mm aaa");   
           
        System.out.println("format1 = " + format1.format(rightNow));   
        System.out.println("format2 = " + format2.format(rightNow));   
        System.out.println("format3 = " + format3.format(rightNow));   
        System.out.println("format4 = " + format4.format(rightNow));   
        System.out.println("format5 = " + format5.format(rightNow));   
        System.out.println("format6 = " + format6.format(rightNow));   
        System.out.println("format7 = " + format7.format(rightNow));   
    }   
  
}   

輸出結果:

引用

format1 = 2006-12-05 06:12:02
format2 = 2006-12-05
format3 = 6:12 下午
format4 = 2006.12.05 公元 at 18:12:02 CST
format5 = 星期二, 十二月, 05, '2006
format6 = 2006.12.05 18:12 o'clock 下午, 中國標準時間
format7 = 02006.十二月.05 公元 06:12 下午

 

取當月的第一天:
java.text.SimpleDateFormat format = new java.text.SimpleDateFormat("yyyy-MM-01");
java.util.Date firstDay=new java.util.Date();
System.out.println("the month first day is "+formats.format(firstDay));
取當月的最後一天:
Calendar cal = Calendar.getInstance();
int maxDay=cals.getActualMaximum(Calendar.DAY_OF_MONTH);
java.text.Format formatter3=new java.text.SimpleDateFormat("yyyy-MM-"+maxDay);
System.out.println(formatter3.format(cal.getTime()));

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.