一、獲取當前時間的時間戳java
1.一、時間進制sql
1.二、獲取毫秒級時間戳orm
1.三、獲取納秒級時間戳對象
二、java.util包blog
2.一、Data接口
2.二、Calendar字符串
三、java.time包get
3.一、LocalDate博客
3.二、LocalTimeio
3.三、LocalDateTime
3.四、Clock
3.五、Instant
四、日期時間格式
4.一、簡單示例
4.二、經常使用格式轉換
五、月份對應的英文
日常會遇到不少的日期格式,各類各樣的,什麼UTC、GMT、毫秒級、微秒級、納秒級....這些格式,怎麼建立這些格式很簡單,可是,怎麼將這幾種格式進行相互轉換,是一個問題!!!!因此我專門寫一篇博客,作一下筆記吧,反正常常會用到。
1秒=1000毫秒
1秒=1000000微秒(1毫秒=1000微秒)
1秒=1000000000納秒(1微秒=1000納秒) ( 1毫秒=1000000納秒)
要得到秒級時間戳,可使用毫秒級時間戳除以1000便可。
獲取毫秒時間戳的方式比較多,通常都是用System.currentTimeMillis()。
@Test public void testTimeStamp() { // 得到當前時間的時間戳(13位),單位是毫秒 // 方式1 long timeStamp1 = System.currentTimeMillis(); // 方式2 Date date = new Date(); long timeStamp2 = date.getTime(); // 方式3 Calendar calendar = Calendar.getInstance(); long timeStamp3 = calendar.getTimeInMillis(); // 方法4 Clock clock = Clock.systemUTC(); long timeStamp4 = clock.millis(); // 打印時間戳示例 String str = String.format("%s %s %s %s", timeStamp1, timeStamp2, timeStamp3, timeStamp4); System.out.println(str); // 1567942696718 1567942696718 1567942696728 1567942696731 }
納秒時間戳,好像用的不是特別多
System.out.println(System.nanoTime());
之因此使用java.util.Date指明Date類的包爲java.util,是由於java.sql包中也有一個Date類。
Date類的輸出格式:Sun Sep 08 17:49:50 CST 2019
Date類有不少方法都被廢棄了,包括構造方法,因此經常使用的使用方法以下:
@Test public void testDete() { // 利用當前時間戳建立的Date實例,底層調用System.currentTimeMillis() Date date1 = new Date(); System.out.println(date1); // Sun Sep 08 17:49:50 CST 2019 // 利用一個時間戳來建立Date對象(時間戳轉Date對象) long timeStamp = System.currentTimeMillis() - 100; // 當前時間的100秒前 Date date2 = new Date(timeStamp); // Date的compareTo,用於比較兩個時間的前後 int flag = date1.compareTo(date2); // date1.compareTo(date2)返回值分三種狀況 // flag = 0, 兩個時間相同(時間戳相同) // flag = 1, date1 要晚於 date2(date1的時間戳大於date2的時間戳) // flag = -1,date1 要早於 date2(date1的時間戳小於於date2的時間戳) // 判斷date1是否晚於date2 boolean after = date1.after(date2); // 判斷date1是否早於date2 boolean before = date1.before(date2); // 獲取date對象的時間戳(13位),毫秒 timeStamp = date1.getTime(); // 設置date對象的時間戳 date1.setTime(timeStamp); }
建議不要使用Date類的廢棄的API,有一個Date.getMonth()獲取月份,是從0開始計數,也就是說,5月份,getMonth()的值是4。
Calendar是一個抽象類,因此不能實例化,可是能夠調用getInstance()靜態方法得到Calendar實例。
@Test public void testCalender() { // 調用靜態方法獲取Calendar實例(使用默認的TimeZone和Locale) Calendar calendar1 = Calendar.getInstance(); // 獲取時間戳(13位),毫秒 long timeStamp = calendar1.getTimeInMillis(); // 獲取Date對象 Date date1 = calendar1.getTime(); // 設置時間 Date date2 = new Date(System.currentTimeMillis() - 100); calendar1.setTime(date2); // 獲取Calendar的字段值(好比YEAR、MONTH....) final int month = calendar1.get(Calendar.MONTH); System.out.println(month); // 注意,month從0開始計算,9月返回8 // 修改時間(爲指定字段進行計算) calendar1.add(Calendar.YEAR, -1); // 當前是2019年,這裏將年份減1 System.out.println(calendar1.get(Calendar.YEAR)); // 2018 // 其餘字段,好比月、天、時分秒的計算都是同樣的作法 // 獲取某個字段的最大值(一樣能夠有對應的接口獲取最小值) int maxDay = calendar1.getActualMaximum(Calendar.DAY_OF_MONTH); System.out.println(maxDay); // 2018年9月,最多有30天 Calendar calendar2 = Calendar.getInstance(); // 設置指定字段值,注意,月份是從0開始計數 calendar2.set(Calendar.YEAR, 2030); // 設置年月日 calendar2.set(2029, 11, 5); System.out.println(calendar2.getTime()); // Wed Dec 05 18:06:30 CST 2029 // 設置年月日時分秒 calendar2.set(2030,10, 4, 12, 58, 59); }
LocalDate能夠說使用的比較多了,由於能夠比較方便的獲取、設置、修改日期,須要注意的是,LocalDate,從名稱上就能看出,這是獲取「本地」日期。
@Test public void testLocalDate() { // 建立LocalDate對象 LocalDate localDate = LocalDate.now(); System.out.println(localDate); // 2019-09-08 final LocalDate localDate2 = localDate.minusDays(5); System.out.println(localDate); // 2019-09-08 注意,並不會直接修改LocalDate對象 System.out.println(localDate2); //2019-09-03 // getXxxx獲取年月日信息 final int dayOfMonth = localDate.getDayOfMonth(); System.out.println(dayOfMonth); // 設置時間爲2019-11-20,月份從1開始 LocalDate localDate3 = LocalDate.of(2019, 11, 20); System.out.println(localDate3); // 2019-11-20 // 2019年的第100天 LocalDate localDate4 = LocalDate.ofYearDay(2019, 100); System.out.println(localDate4); // 2019-04-10 // 能夠調用LocalData的minusXxx、plusXxx進行日期的計算,getXxx獲取某項值 }
LocalTime,主要是對Time,也就是對時間的操做,而且是本地的時間
@Test public void testLocalTime() { // 利用當前時間,建立LocalTime對象 LocalTime localTime1 = LocalTime.now(); System.out.println(localTime1); // 18:59:31.848 // 指定時-分,建立LocalTime對象,注意,小時範圍爲0-23 LocalTime localTime2 = LocalTime.of(23, 59); System.out.println(localTime2); // 23:59 注意,輸出沒有秒數 // 指定時-分-秒,建立LocalTime對象 LocalTime localTime3 = LocalTime.of(12, 35, 40); System.out.println(localTime3); // 12:35:40 // 額外指定納秒 LocalTime localTime4 = LocalTime.of(13, 20, 55, 1000); System.out.println(localTime4); // 指定一天中的第1000秒來建立LocalTime對象 LocalTime localTime5 = LocalTime.ofSecondOfDay(1000); System.out.println(localTime5); // 00:16:40 // 利用一天中的納秒數來建立LocalTime對象 LocalTime localTime6 = LocalTime.ofNanoOfDay(100000000); System.out.println(localTime6); // 00:00:00.100 // 能夠調用LocalTime的plusXxx,minusXxx進行時間計算,getXxx獲取某項值 }
聰明的你,必定知道LocalDateTime其實就是LocalDate和LocalTime加在一塊兒的類了,使用方式也是同樣的。
@Test public void testLocalDateTime() { LocalDateTime now = LocalDateTime.now(); System.out.println(now); // 2019-09-08T19:16:03.884 // 利用LocalDate和LocalTime建立LocalDateTime實例 LocalDateTime localDateTime1 = LocalDateTime.of(LocalDate.now(), LocalTime.now()); System.out.println(localDateTime1); // 2019-09-08T19:18:36.934 // of用法和LocalDate和LocalTime的of用法同樣,綜合在一塊兒了而已 LocalDateTime localDateTime2 = LocalDateTime.of(2019, 5, 30, 12, 50, 45); System.out.println(localDateTime2); // 2019-05-30T12:50:45 // 能夠調用LocalDateTime的minusXxx,plusXxx來進行日期和時間的操做,使用getXxx獲取某個項的值 }
Clock,時鐘,用法以下:
@Test public void testClock() { Clock clock = Clock.systemUTC(); // 獲取時區 final ZoneId zone = clock.getZone(); System.out.println(zone); // Z // 獲取時間戳(13位),毫秒 long timeStamp = clock.millis(); System.out.println(timeStamp); // 1567942442222 }
Instant基本沒用過(對於我而言)
@Test public void testInstant() { Instant instant = Instant.now(); System.out.println(instant); // 2019-09-08T11:39:29.194Z final Instant parse = Instant.parse("2019-09-08T11:39:29.109000000Z"); System.out.println(parse); // 2019-09-08T11:39:29.109Z // 能夠調用plusXxx,minusXxx進行時間計算 }
日期時間格式,可使用SimpleDateFormat類進行自定義設置;
@Test public void testSimpleDateFormat() { Date date = new Date(); System.out.println(date); // Sun Sep 08 19:49:57 CST 2019 // 建立想要顯示的格式 SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); final String dateStr = formatter.format(date); System.out.println(dateStr); // 2019-09-08 19:49:57 }
格式有不少種,業務不一樣,時間的格式也是不一樣的,可是能夠掌握一下規律
/** * 將UTC時間進行轉換 * 好比 2019-09-08T19:49:57Z * 2019-09-08T19:49:57.100Z * 2019-09-08T19:49:57.100000000Z * 2019-09-08T19:49:57.100000000 CST * 轉換爲 * 2019-09-08 19:49:57 */ @Test public void parse1() { // 要解析的時間字符串 String src = "2019-09-08T19:49:57.100000000Z CST"; // 解析日期時,下面這個格式是通用的 SimpleDateFormat formatter1 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); // 目標格式 SimpleDateFormat formatter2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); try { Date date = formatter1.parse(src); String dateStr = formatter2.format(date); System.out.println(dateStr); // 2019-09-08 19:49:57 } catch (ParseException e) { e.printStackTrace(); } }
/** * 生成GMT格式的時間:Thu, 15 Sep 2011 12:13:41 GMT */ @Test public void testToGMT() { SimpleDateFormat formatter = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss 'GMT'", Locale.US); String str = formatter.format(new Date()); System.out.println(str); // Sun, 08 Sep 2019 23:01:35 GMT }
/** * 時間計算 * * @param datatime 字符串形式的日期時間,好比2019-10-09 20:03:00 * @param seconds 增減多少秒 * @return */ public String computeDateTime(String datatime, int seconds) { if (seconds == 0) { return datatime; } SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date = null; try { date = formatter.parse("2019-10-09 20:03:00"); long resMillSecond = date.getTime() + seconds * 1000; return formatter.format(new Date(resMillSecond)); } catch (ParseException e) { e.printStackTrace(); } return datatime; } public void testTime() throws ParseException { System.out.println(computeDateTime("2018-10-09 20:03:00", 4)); // 2018-10-09 20:02:56 System.out.println(computeDateTime("2018-10-09 20:03:00", -4)); // 2018-10-09 20:03:04 }
月份 | 英文 |
1月 | January |
2月 | February |
3月 | march |
4月 | April |
5月 | May |
6月 | June |
7月 | July |
8月 | August |
9月 | September |
10月 | October |
11月 | November |
12月 | December |