摘要:用的時(shí)候再轉(zhuǎn)化成年月日時(shí)分秒。創(chuàng)建日期對(duì)象代表當(dāng)前時(shí)間從年月日早上點(diǎn)分秒開始經(jīng)歷了毫秒也就是秒的時(shí)間獲取一個(gè)時(shí)間的毫秒數(shù),返回一個(gè)型的整數(shù)。
時(shí)間原點(diǎn)概念
計(jì)算機(jī)語言中的時(shí)間原點(diǎn)都是從1970年1月1日8點(diǎn)0分0秒開始算的,就相當(dāng)于時(shí)間的0。
為什么對(duì)應(yīng)1970年呢?
其實(shí),現(xiàn)在大部分計(jì)算機(jī)系統(tǒng)使用的時(shí)間都是UNIX時(shí)間,而UNIX或類UNIX系統(tǒng)使用的時(shí)間表示方式是:從協(xié)調(diào)世界時(shí)1970年1月1日0時(shí)0分0秒起至現(xiàn)在的總秒數(shù),不包括閏秒。
為什么是8點(diǎn)?
因?yàn)橹袊奶窖髸r(shí)區(qū)是UTC-8,剛好和格林威治時(shí)間差8個(gè)小時(shí)。
Unix系統(tǒng)有一個(gè)時(shí)間戳(timestamp),這個(gè)時(shí)間戳是系統(tǒng)和程序用來計(jì)時(shí)的一個(gè)東西,表示從1970年1月1日(UTC/GMT的午夜)開始所經(jīng)過的秒數(shù),不考慮閏秒。用的時(shí)候再轉(zhuǎn)化成年月日時(shí)分秒。后來隨著UNIX的普及這個(gè)方法也被普及,很多后來出現(xiàn)的計(jì)算機(jī)都用這種方法記錄時(shí)間,java、數(shù)據(jù)庫、許多精密的儀器等也自然也遵循了這一約束。
意思就是所有的日期,都是以時(shí)間原點(diǎn)這個(gè)0點(diǎn)為基準(zhǔn),每過一毫秒,就+1,單位是毫秒。
Date d1 = new Date(); //代表當(dāng)前時(shí)間 Date d2 = new Date(5000); //從1970年1月1日 早上8點(diǎn)0分0秒 開始經(jīng)歷了5000毫秒(也就是5秒)的時(shí)間getTime
getTime() :獲取一個(gè)時(shí)間的毫秒數(shù),返回一個(gè)long型的整數(shù)。
例:
Date d1 = new Date(); //代表當(dāng)前時(shí)間 Long time = d1.getTime(); //當(dāng)前時(shí)間毫秒數(shù) System.out.println("當(dāng)前時(shí)間:" + d1); //輸出結(jié)果為Thu May 17 11:57:49 CST 2018 表示現(xiàn)在是2018年5月17日11:57:49 System.out.println("當(dāng)前時(shí)間毫秒數(shù):" + time); //輸出結(jié)果為1526529469712 ,表示從1970年1月1日8點(diǎn)至現(xiàn)在經(jīng)過了1526529469712毫秒
還有一個(gè)方法與getTime的作用是一樣的 -> System.currentTimeMillis();
實(shí)例下面通過一個(gè)實(shí)例來理解上面的概念:
借助隨機(jī)數(shù),創(chuàng)建一個(gè)從1995.1.1 00:00:00 到 1995.12.31 23:59:59 之間的隨機(jī)日期
//第一步,計(jì)算1995年的毫秒數(shù) long second = 1000; //一秒為1000毫秒 long min = second * 60; //一分鐘 long hour = min * 60;//一小時(shí) long day = hour * 24;//一天 long year = day * 365;//一年 long leapday = (1995-1970)/4 * day; //每隔四年就有一個(gè)閏日 long eightHour = 8 * hour; //1997年8點(diǎn)才是真正開始時(shí)間,所以要算1995年1月1日0點(diǎn)得減去8個(gè)小時(shí) 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)); //第二步,定義一個(gè)隨機(jī)時(shí)間 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)前時(shí)間 Long time = d1.getTime(); //從1970年1月1日 早上8點(diǎn)0分0秒 開始經(jīng)歷了5000毫秒(也就是5秒)的時(shí)間 System.out.println("當(dāng)前時(shí)間:" + d1); System.out.println("當(dāng)前時(shí)間毫秒數(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
上面的例子直接打印對(duì)象,會(huì)看到 “Wed Sep 20 02:54:59 CST 1995” 這樣的格式,可讀性比較差,為了獲得“1995/9/20 02:54:59”這樣的格式,就要將日期進(jìn)行格式化。
y 代表年
M 代表月
d 代表日
H 代表24進(jìn)制的小時(shí)
h 代表12進(jìn)制的小時(shí)
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)前時(shí)間通過 yyyy-MM-dd HH:mm:ss SSS 格式化后的輸出: "+str);
輸出結(jié)果: 當(dāng)前時(shí)間通過 yyyy-MM-dd HH:mm:ss SSS 格式化后的輸出: 2018-05-17 15:38:42 224
2.字符串轉(zhuǎn)日期
模式(yyyy/MM/dd HH:mm:ss)需要和字符串格式保持一致,如果不一樣就會(huì)拋出解析異常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)換為日期對(duì)象: %s",str,d.toString()); } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); }Calendar類
Calendar類即日歷類,常用于進(jìn)行“翻日歷”,比如下個(gè)月的今天是多久
1.Calendar與Date進(jìn)行轉(zhuǎn)換
//采用單例模式獲取日歷對(duì)象Calendar.getInstance(); Calendar c = Calendar.getInstance(); Date d2 = new Date(0); c.setTime(d2); //把這個(gè)日歷,調(diào)成日期 : 1970.1.1 08:00:00 Date d = c.getTime();//通過日歷對(duì)象得到日期對(duì)象 System.out.println("當(dāng)前日歷的日起對(duì)象: "+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())); // 下個(gè)月的今天 c.setTime(now); c.add(Calendar.MONTH, 1); System.out.println("下個(gè)月的今天: " +format(c.getTime())); // 去年的今天 c.setTime(now); c.add(Calendar.YEAR, -1); System.out.println("去年的今天: " +format(c.getTime())); // 上個(gè)月的第三天 c.setTime(now); c.add(Calendar.MONTH, -1); c.set(Calendar.DATE, 3); System.out.println("上個(gè)月的第三天: " +format(c.getTime())); } private static String format(Date time) { return sdf.format(time); }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/69415.html
摘要:正則表達(dá)式的概述和簡單使用正則表達(dá)式是指一個(gè)用來描述或者匹配一系列符合某個(gè)語法規(guī)則的字符串的單個(gè)字符串。例如,在表達(dá)式中,存在四個(gè)這樣的組組零始終代表整個(gè)表達(dá)式。 1_正則表達(dá)式的概述和簡單使用 A:正則表達(dá)式 是指一個(gè)用來描述或者匹配一系列符合某個(gè)語法規(guī)則的字符串的單個(gè)字符串。其實(shí)就是一種規(guī)則。有自己特殊的應(yīng)用。 作用:比如注冊(cè)郵箱,郵箱有用戶名和密碼,一般會(huì)對(duì)其限制長度,這個(gè)...
摘要:類是日期時(shí)間格式化子類的抽象類,我們通過這個(gè)類可以幫我們完成日期和文本之間的轉(zhuǎn)換也就是可以在對(duì)象與對(duì)象之間進(jìn)行來回轉(zhuǎn)換。構(gòu)造方法由于為抽象類,不能直接使用,所以需要常用的子類。 day01【Object類、常用API】 主要內(nèi)容 Object類 Date類 DateFormat類 Calendar類 System類 StringBuilder類 包裝類 教學(xué)目標(biāo) -[ ] 能夠說出...
摘要:是開始提供的時(shí)間日期,主要用來優(yōu)化以前對(duì)于時(shí)間日期的處理操作。然而,我們?cè)谑褂没蚴褂玫臅r(shí)候,往往會(huì)發(fā)現(xiàn)使用請(qǐng)求參數(shù)或返回結(jié)果中有的時(shí)候會(huì)發(fā)生各種問題。 LocalDate、LocalTime、LocalDateTime是Java 8開始提供的時(shí)間日期API,主要用來優(yōu)化Java 8以前對(duì)于時(shí)間日期的處理操作。然而,我們?cè)谑褂肧pring Boot或使用Spring Cloud Fei...
摘要:日期和時(shí)間處理日期和時(shí)間的函數(shù)庫。使用中可觀察序列,創(chuàng)建異步基于事件應(yīng)用程序的函數(shù)庫。為分布式系統(tǒng)提供延遲和容錯(cuò)處理。發(fā)布使用本機(jī)格式分發(fā)應(yīng)用程序的工具。將程序資源和打包成和的本機(jī)文件。圖像處理用來幫助創(chuàng)建評(píng)估或操作圖形的函數(shù)庫。 好資源要分享原文 譯者 唐尤華 翻譯自 github akullpp 構(gòu)建 這里搜集了用來構(gòu)建應(yīng)用程序的工具。 Apache Maven:Mave...
摘要:前言前面一篇文章寫了如何安全的使用里面介紹了如何處理日期時(shí)間,以及如何保證線程安全,及其介紹了在中的處理時(shí)間日期默認(rèn)就線程安全的類。引入了全新的日期時(shí)間格式工具,線程安全而且使用方便。 前言 前面一篇文章寫了《SimpleDateFormat 如何安全的使用?》, 里面介紹了 SimpleDateFormat 如何處理日期/時(shí)間,以及如何保證線程安全,及其介紹了在 Java 8 中的處...
閱讀 3049·2021-09-22 15:52
閱讀 2914·2019-08-30 15:55
閱讀 2708·2019-08-30 15:53
閱讀 2461·2019-08-30 13:21
閱讀 1630·2019-08-30 13:10
閱讀 2488·2019-08-26 12:09
閱讀 2575·2019-08-26 10:33
閱讀 1810·2019-08-23 18:06