国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

Java中Date類和Calendar類的常用實(shí)例小結(jié)

2019-11-26 15:01:31
字體:
供稿:網(wǎng)友

前言
寫后臺(tái)程序的時(shí)候,經(jīng)常需要存儲(chǔ)當(dāng)前服務(wù)器的時(shí)間戳,使用時(shí)間戳也很方便,客戶端和服務(wù)器端都可以根據(jù)自己的需求做各自的轉(zhuǎn)換

在php里,獲取當(dāng)前時(shí)間戳使用time()函數(shù),格式化輸出通過Date()函數(shù)即可,Java里相對(duì)復(fù)雜一些,這里簡單介紹一下

Java語言中的Calendar,Date,DateFormat組成了Java標(biāo)準(zhǔn)的一個(gè)基本但是非常重要的部分。日期是商業(yè)邏輯計(jì)算一個(gè)關(guān)鍵的部分,所有的開發(fā)者都應(yīng)該能計(jì)算未來的日期,定制日期的顯示格式,并將文本數(shù)據(jù)解析成日期對(duì)象


獲取UNIX時(shí)間戳
在JDK1.0中,Date類是唯一的一個(gè)代表時(shí)間的類,但是由于Date類不便于實(shí)現(xiàn)國際化,所以從JDK1.1版本開始,推薦使用Calendar類進(jìn)行時(shí)間和日期的處理。這里簡單介紹一下用Date類如何獲取當(dāng)前時(shí)間戳

使用系統(tǒng)的當(dāng)前日期和時(shí)間創(chuàng)建一個(gè)日期對(duì)象并返回一個(gè)長整數(shù),這個(gè)時(shí)間通常稱為Java 虛擬機(jī)(JVM)主機(jī)環(huán)境的系統(tǒng)時(shí)間,單位是毫秒,因此需要除以1000轉(zhuǎn)換成UNIX時(shí)間戳

  

 import java.util.Date;      public class TimeTest {     public static void main(String args[]) {       Date time = new Date();       System.out.println(time.getTime() / 1000); // 1387258105       System.out.println(time.toString()); // Tue Dec 17 13:28:25 CST 2013     }   } 

格式化日期
php里可以使用Date()函數(shù)定制日期數(shù)據(jù)的格式用于呈現(xiàn),Java里需要調(diào)用SimpleDateFormat類,例如將當(dāng)前時(shí)間格式化輸出:

 

  import java.text.SimpleDateFormat;   import java.util.Date;         public class TimeTest {     public static void main(String args[]) {       Date time = new Date();       System.out.println(time.getTime() / 1000); // 1387260201          SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd HH:mm:ss"); // 2013-03-17 14:03:21       String str = sdf.format(time);       System.out.println(str);     }   } 

將文本解析成日期對(duì)象
給定了格式化的時(shí)間字符串,例如“2013-12-17 14:05:59”,需要將其轉(zhuǎn)換成Date對(duì)象,便于獲取時(shí)間戳獲取進(jìn)行其它格式化操作,可以繼續(xù)調(diào)用SimpleDateFormat類

  

 import java.text.ParseException;   import java.text.SimpleDateFormat;   import java.util.Date;         public class TimeTest {     public static void main(String args[]) {       String text = "2013-12-17 14:05:59";       SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");              try {         Date time = sdf.parse(text);         System.out.println(time.getTime() / 1000);       } catch(ParseException e) {         System.out.println(e.getMessage());       }     }   } 

獲取日期的特定部分
通過Date和SimpleDateFormat兩個(gè)類,我們已經(jīng)可以實(shí)現(xiàn)獲取當(dāng)前時(shí)間戳,日期格式化輸出,格式化日期字符串轉(zhuǎn)Date對(duì)象功能,現(xiàn)在還有一個(gè)新的需求,如何獲取日期的特定部分,例如當(dāng)前的小時(shí),當(dāng)前的天數(shù)等,這就需要用到Calendar類了

  import java.util.Calendar;   import java.util.Date;   import java.util.GregorianCalendar;         public class TimeTest {     public static void main(String args[]) {       Date date = new Date();       GregorianCalendar gcalendar = new GregorianCalendar();       gcalendar.setTime(date);          int year = gcalendar.get(Calendar.YEAR);       int month = gcalendar.get(Calendar.MONTH);       int day = gcalendar.get(Calendar.DAY_OF_MONTH);          int hour = gcalendar.get(Calendar.HOUR_OF_DAY);       int minute = gcalendar.get(Calendar.MINUTE);       int second = gcalendar.get(Calendar.MINUTE);          System.out.println(year + "-" + month + "-" + day + " " + hour + ":" + minute + ":"           + second);     }   } 


計(jì)算兩個(gè)日期之間相差的天數(shù)

例如計(jì)算2010年4月1號(hào)和2009年3月11號(hào)之間相差的天數(shù),則可以使用時(shí)間和日期處理進(jìn)行計(jì)算。
該程序?qū)崿F(xiàn)的原理為:首先代表兩個(gè)特定的時(shí)間點(diǎn),這里使用Calendar的對(duì)象進(jìn)行代表,然后將兩個(gè)時(shí)間點(diǎn)轉(zhuǎn)換為對(duì)應(yīng)的相對(duì)時(shí)間,求兩個(gè)時(shí)間點(diǎn)相對(duì)時(shí)間的差值,然后除以1天的毫秒數(shù)(24小時(shí)X60分鐘X60秒X1000毫秒)即可獲得對(duì)應(yīng)的天數(shù)。實(shí)現(xiàn)該示例的完整代碼如下:

import java.util.*;/*** 計(jì)算兩個(gè)日期之間相差的天數(shù)*/public class DateExample1 {public static void main(String[] args) {//設(shè)置兩個(gè)日期//日期:2009年3月11號(hào)Calendar c1 = Calendar.getInstance();c1.set(2009, 3 - 1, 11);//日期:2010年4月1號(hào)Calendar c2 = Calendar.getInstance();c2.set(2010, 4 - 1, 1);//轉(zhuǎn)換為相對(duì)時(shí)間long t1 = c1.getTimeInMillis();long t2 = c2.getTimeInMillis();//計(jì)算天數(shù)long days = (t2 - t1)/(24 * 60 * 60 * 1000);System.out.println(days);}}


輸出當(dāng)前月的月歷

該示例的功能是輸出當(dāng)前系統(tǒng)時(shí)間所在月的日歷,例如當(dāng)前系統(tǒng)時(shí)間是2009年3月10日,則輸出2009年3月的日歷。
該程序?qū)崿F(xiàn)的原理為:首先獲得該月1號(hào)是星期幾,然后獲得該月的天數(shù),最后使用流程控制實(shí)現(xiàn)按照日歷的格式進(jìn)行輸出即可。即如果1號(hào)是星期一,則打印一個(gè)單位的空格,如果1號(hào)是星期二,則打印兩個(gè)單位的空格,依次類推。打印完星期六的日期以后,進(jìn)行換行。實(shí)現(xiàn)該示例的完整代碼如下:

import java.util.*;/*** 輸出當(dāng)前月的日歷*/public class DateExample2{public static void main(String[] args){//獲得當(dāng)前時(shí)間Calendar c = Calendar.getInstance();//設(shè)置代表的日期為1號(hào)c.set(Calendar.DATE,1);//獲得1號(hào)是星期幾int start = c.get(Calendar.DAY_OF_WEEK);//獲得當(dāng)前月的最大日期數(shù)int maxDay = c.getActualMaximum(Calendar.DATE);//輸出標(biāo)題System.out.println("星期日 星期一 星期二 星期三 星期四 星期五 星期六");//輸出開始的空格for(int i = 1;i < start;i++){System.out.print(" ");}//輸出該月中的所有日期for(int i = 1;i <= maxDay;i++){//輸出日期數(shù)字System.out.print(" " + i);//輸出分隔空格System.out.print(" ");if(i < 10){System.out.print(' ');}//判斷是否換行if((start + i - 1) % 7 == 0){System.out.println();}}//換行System.out.println();}}

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 洛浦县| 许昌市| 临漳县| 大丰市| 石景山区| 宣恩县| 百色市| 米脂县| 黄冈市| 曲沃县| 仙桃市| 桑日县| 漳浦县| 汕尾市| 青铜峡市| 巩留县| 常熟市| 南陵县| 台南县| 莫力| 吉木萨尔县| 麻阳| 科技| 崇阳县| 麦盖提县| 平昌县| 东兴市| 永泰县| 额敏县| 铜山县| 宝鸡市| 乌兰察布市| 交口县| 德格县| 安康市| 湖南省| 漠河县| 斗六市| 铜陵市| 内江市| 辽阳市|