成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Java日期類分析

Wuv1Up / 862人閱讀

摘要:用的時候再轉(zhuǎn)化成年月日時分秒。創(chuàng)建日期對象代表當(dāng)前時間從年月日早上點(diǎn)分秒開始經(jīng)歷了毫秒也就是秒的時間獲取一個時間的毫秒數(shù),返回一個型的整數(shù)。

時間原點(diǎn)概念

計算機(jī)語言中的時間原點(diǎn)都是從1970年1月1日8點(diǎn)0分0秒開始算的,就相當(dāng)于時間的0。
為什么對應(yīng)1970年呢?
其實(shí),現(xiàn)在大部分計算機(jī)系統(tǒng)使用的時間都是UNIX時間,而UNIX或類UNIX系統(tǒng)使用的時間表示方式是:從協(xié)調(diào)世界時1970年1月1日0時0分0秒起至現(xiàn)在的總秒數(shù),不包括閏秒。
為什么是8點(diǎn)?
因?yàn)橹袊奶窖髸r區(qū)是UTC-8,剛好和格林威治時間差8個小時。

時間是怎么計算的

Unix系統(tǒng)有一個時間戳(timestamp),這個時間戳是系統(tǒng)和程序用來計時的一個東西,表示從1970年1月1日(UTC/GMT的午夜)開始所經(jīng)過的秒數(shù),不考慮閏秒。用的時候再轉(zhuǎn)化成年月日時分秒。后來隨著UNIX的普及這個方法也被普及,很多后來出現(xiàn)的計算機(jī)都用這種方法記錄時間,java、數(shù)據(jù)庫、許多精密的儀器等也自然也遵循了這一約束。
意思就是所有的日期,都是以時間原點(diǎn)這個0點(diǎn)為基準(zhǔn),每過一毫秒,就+1,單位是毫秒。

創(chuàng)建日期對象
Date d1 = new Date();  //代表當(dāng)前時間
Date d2 = new Date(5000); //從1970年1月1日 早上8點(diǎn)0分0秒 開始經(jīng)歷了5000毫秒(也就是5秒)的時間
getTime

getTime() :獲取一個時間的毫秒數(shù),返回一個long型的整數(shù)。
例:

Date d1 = new Date();  //代表當(dāng)前時間
Long time = d1.getTime(); //當(dāng)前時間毫秒數(shù)
System.out.println("當(dāng)前時間:" + d1); //輸出結(jié)果為Thu May 17 11:57:49 CST 2018 表示現(xiàn)在是2018年5月17日11:57:49
System.out.println("當(dāng)前時間毫秒數(shù):" + time); //輸出結(jié)果為1526529469712 ,表示從1970年1月1日8點(diǎn)至現(xiàn)在經(jīng)過了1526529469712毫秒

還有一個方法與getTime的作用是一樣的 -> System.currentTimeMillis();

實(shí)例

下面通過一個實(shí)例來理解上面的概念:
借助隨機(jī)數(shù),創(chuàng)建一個從1995.1.1 00:00:00 到 1995.12.31 23:59:59 之間的隨機(jī)日期

//第一步,計算1995年的毫秒數(shù)
long second = 1000; //一秒為1000毫秒
long min = second * 60; //一分鐘
long hour = min * 60;//一小時
long day = hour * 24;//一天
long year = day * 365;//一年
long leapday = (1995-1970)/4 * day; //每隔四年就有一個閏日
long eightHour = 8 * hour; //1997年8點(diǎn)才是真正開始時間,所以要算1995年1月1日0點(diǎn)得減去8個小時
long _1995Start = year * (1995-1970) + leapday - eightHour; //1995年的毫秒數(shù)(從1970年算起)
System.out.println("1995年的第一天:" + new Date(_1995Start));
System.out.println("1995年的最后一天:" + new Date(_1995Start+year-1));
//第二步,定義一個隨機(jī)時間
long randomTime = (long)(Math.random() * (year-1) + _1995Start);
Date randomDate = new Date(randomTime);
System.out.println("1995年里的隨機(jī)一天:" + randomDate);

Date d1 = new Date();  //代表當(dāng)前時間
Long time = d1.getTime(); //從1970年1月1日 早上8點(diǎn)0分0秒 開始經(jīng)歷了5000毫秒(也就是5秒)的時間
System.out.println("當(dāng)前時間:" + d1);
System.out.println("當(dāng)前時間毫秒數(shù):" + time);

運(yùn)行結(jié)果:
1995年的第一天:Sun Jan 01 00:00:00 CST 1995
1995年的最后一天:Sun Dec 31 23:59:59 CST 1995
1995年里的隨機(jī)一天:Wed Sep 20 02:54:59 CST 1995

日期格式化

上面的例子直接打印對象,會看到 “Wed Sep 20 02:54:59 CST 1995” 這樣的格式,可讀性比較差,為了獲得“1995/9/20 02:54:59”這樣的格式,就要將日期進(jìn)行格式化。
y 代表年
M 代表月
d 代表日
H 代表24進(jìn)制的小時
h 代表12進(jìn)制的小時
m 代表分鐘
s 代表秒
S 代表毫秒

SimpleDateFormat 日期格式化類
format 日期轉(zhuǎn)字符串
parse 字符串轉(zhuǎn)日期

1.日期轉(zhuǎn)字符串

SimpleDateFormat sdf =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS" );
Date d= new Date();
String str = sdf.format(d);
System.out.println("當(dāng)前時間通過 yyyy-MM-dd HH:mm:ss SSS 格式化后的輸出: "+str);

輸出結(jié)果: 當(dāng)前時間通過 yyyy-MM-dd HH:mm:ss SSS 格式化后的輸出: 2018-05-17 15:38:42 224

2.字符串轉(zhuǎn)日期
模式(yyyy/MM/dd HH:mm:ss)需要和字符串格式保持一致,如果不一樣就會拋出解析異常ParseException

SimpleDateFormat sdf =new SimpleDateFormat("yyyy/MM/dd HH:mm:ss" );
  
String str = "2016/1/5 12:12:12";

try {
Date d = sdf.parse(str);
System.out.printf("字符串 %s 通過格式  yyyy/MM/dd HH:mm:ss %n轉(zhuǎn)換為日期對象: %s",str,d.toString());
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Calendar類

Calendar類即日歷類,常用于進(jìn)行“翻日歷”,比如下個月的今天是多久
1.Calendar與Date進(jìn)行轉(zhuǎn)換

//采用單例模式獲取日歷對象Calendar.getInstance();
Calendar c = Calendar.getInstance();

Date d2 = new Date(0);
c.setTime(d2); //把這個日歷,調(diào)成日期 : 1970.1.1 08:00:00
Date d = c.getTime();//通過日歷對象得到日期對象
System.out.println("當(dāng)前日歷的日起對象: "+d);

輸出結(jié)果為:Thu Jan 01 08:00:00 CST 1970

2.翻日歷
add方法,在原日期上增加年/月/日
set方法,直接設(shè)置年/月/日

private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 
public static void main(String[] args) {
Calendar c = Calendar.getInstance();
Date now = c.getTime();
// 當(dāng)前日期
System.out.println("當(dāng)前日期:	" + format(c.getTime()));

// 下個月的今天
c.setTime(now);
c.add(Calendar.MONTH, 1);
System.out.println("下個月的今天:	" +format(c.getTime()));

// 去年的今天
c.setTime(now);
c.add(Calendar.YEAR, -1);
System.out.println("去年的今天:	" +format(c.getTime()));

// 上個月的第三天
c.setTime(now);
c.add(Calendar.MONTH, -1);
c.set(Calendar.DATE, 3);
System.out.println("上個月的第三天:	" +format(c.getTime()));

}

private static String format(Date time) {
return sdf.format(time);
}

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/69415.html

相關(guān)文章

  • Java編程基礎(chǔ)15——正則表達(dá)式&常用工具

    摘要:正則表達(dá)式的概述和簡單使用正則表達(dá)式是指一個用來描述或者匹配一系列符合某個語法規(guī)則的字符串的單個字符串。例如,在表達(dá)式中,存在四個這樣的組組零始終代表整個表達(dá)式。 1_正則表達(dá)式的概述和簡單使用 A:正則表達(dá)式 是指一個用來描述或者匹配一系列符合某個語法規(guī)則的字符串的單個字符串。其實(shí)就是一種規(guī)則。有自己特殊的應(yīng)用。 作用:比如注冊郵箱,郵箱有用戶名和密碼,一般會對其限制長度,這個...

    miqt 評論0 收藏0
  • java常見API第二部分

    摘要:類是日期時間格式化子類的抽象類,我們通過這個類可以幫我們完成日期和文本之間的轉(zhuǎn)換也就是可以在對象與對象之間進(jìn)行來回轉(zhuǎn)換。構(gòu)造方法由于為抽象類,不能直接使用,所以需要常用的子類。 day01【Object類、常用API】 主要內(nèi)容 Object類 Date類 DateFormat類 Calendar類 System類 StringBuilder類 包裝類 教學(xué)目標(biāo) -[ ] 能夠說出...

    maybe_009 評論0 收藏0
  • Spring Boot和Feign中使用Java 8時間日期API(LocalDate等)的序列化問

    摘要:是開始提供的時間日期,主要用來優(yōu)化以前對于時間日期的處理操作。然而,我們在使用或使用的時候,往往會發(fā)現(xiàn)使用請求參數(shù)或返回結(jié)果中有的時候會發(fā)生各種問題。 LocalDate、LocalTime、LocalDateTime是Java 8開始提供的時間日期API,主要用來優(yōu)化Java 8以前對于時間日期的處理操作。然而,我們在使用Spring Boot或使用Spring Cloud Fei...

    UCloud 評論0 收藏0
  • 國外程序員整理的Java資源大全

    摘要:日期和時間處理日期和時間的函數(shù)庫。使用中可觀察序列,創(chuàng)建異步基于事件應(yīng)用程序的函數(shù)庫。為分布式系統(tǒng)提供延遲和容錯處理。發(fā)布使用本機(jī)格式分發(fā)應(yīng)用程序的工具。將程序資源和打包成和的本機(jī)文件。圖像處理用來幫助創(chuàng)建評估或操作圖形的函數(shù)庫。 好資源要分享原文 譯者 唐尤華 翻譯自 github akullpp 構(gòu)建 這里搜集了用來構(gòu)建應(yīng)用程序的工具。 Apache Maven:Mave...

    chengtao1633 評論0 收藏0
  • 20 個案例教你在 Java 8 中如何處理日期和時間?

    摘要:前言前面一篇文章寫了如何安全的使用里面介紹了如何處理日期時間,以及如何保證線程安全,及其介紹了在中的處理時間日期默認(rèn)就線程安全的類。引入了全新的日期時間格式工具,線程安全而且使用方便。 前言 前面一篇文章寫了《SimpleDateFormat 如何安全的使用?》, 里面介紹了 SimpleDateFormat 如何處理日期/時間,以及如何保證線程安全,及其介紹了在 Java 8 中的處...

    Rango 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<