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