Java中Calendar時光操作經常使用辦法詳解。本站提示廣大學習愛好者:(Java中Calendar時光操作經常使用辦法詳解)文章只能為提供參考,不一定能成為您想要的結果。以下是Java中Calendar時光操作經常使用辦法詳解正文
本文實例為年夜家分享了Calendar時光操作經常使用辦法,詳細內容以下
package test; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; /** * Date和Calendar經常使用辦法,Date許多辦法曾經棄用,是以以Calendar為主 * * @author tuzongxun123 * */ public class DateAndCalendarTest { public static void main(String[] args) { // 直接用Date獲得以後體系時光,成果:Tue May 03 08:25:44 CST 2016 Date date = new Date(); // Date中的很多辦法,例如獲得某年、某月、某日等,和設置某年、某月、某日等都不再建議應用, // 建議應用calendar的各類辦法替換,是以便不做記載 // 獲得指定日期的毫秒數,經常使用來比擬兩個日期的年夜小。 date.getTime(); // 應用Calendar獲得以後體系時光,須要獲得Calendar對象後轉換成Date輸入 Calendar calendar = Calendar.getInstance(); // 這個辦法相當於Date中的getTime,獲得以後時光的毫秒數 calendar.getTimeInMillis(); // 獲得指定日期地點周的第一天的日期,默許的一周的第一天是周日 calendar.getFirstDayOfWeek(); // 前往以後calendar日期地點的年,如2016 calendar.get(1); // Calendar轉Date,輸入成果:Tue May 03 09:31:59 CST 2016 Date date2 = calendar.getTime(); System.out.println(date2); // Calendar設置年、月、日,輸入成果:Mon Jun 03 09:31:59 CST 2013 // 相干經常使用重載辦法:calendar.set(year, month, date, hourOfDay, minute); // calendar.set(year, month, date, hourOfDay, minute, second);參數均為int calendar.set(2013, 5, 3); System.out.println(calendar.getTime()); // 應用Calendar設置年,輸入成果:Fri Jun 03 09:42:43 CST 2011 calendar.set(Calendar.YEAR, 2011); System.out.println(calendar.getTime()); // 應用Calendar和數字設置月,留意月份從0開端,代表1月,輸入成果:Mon Jan 03 09:45:32 CST 2011 calendar.set(Calendar.MONTH, 0); System.out.println(calendar.getTime()); // 應用Calendar和自帶常量設置月,留意月份從0開端,代表1月,輸入成果:Thu Feb 03 09:47:07 CST 2011 calendar.set(Calendar.MONTH, Calendar.FEBRUARY); System.out.println(calendar.getTime()); // 應用Calendar和數字設置日,輸入成果:Sat Feb 05 09:48:25 CST 2011 // calendar.set(Calendar.DAY_OF_MONTH, 5)成果一樣; calendar.set(Calendar.DATE, 5); System.out.println(calendar.getTime()); // 設置小時 calendar.set(Calendar.HOUR, 15); System.out.println(calendar.getTime()); // 依據毫秒數設置Calendar時光 calendar.setTimeInMillis(0); // Date轉String,輸入成果:2016-05-03 09:25:29 String forDate = dateToString(new Date()); System.out.println(forDate); // String轉Date,輸入成果:Thu Nov 12 13:23:11 CST 2015 Date strDate = stringToDate("2015-11-12 13:23:11"); System.out.println(strDate); // Date轉Calendar,輸入成果:2015 Calendar calendar2 = dateToCalendar(strDate); System.out.println(calendar2.get(1)); } /** * 把指定的date類型時光轉換為指定格局的字符串 * * @author:tuzongxun * @Title: dateToString * @param @param date * @return void * @date May 3, 2016 9:09:25 AM * @throws */ static String dateToString(Date date) { String str = "yyyy-MM-dd hh:mm:ss"; SimpleDateFormat format = new SimpleDateFormat(str); String dateFormat = format.format(date); return dateFormat; } /** * 把指定的日期格局的字符串轉換成Date類型 * * @author:tuzongxun * @Title: StringToDate * @param @param string * @return void * @date May 3, 2016 9:16:38 AM * @throws */ static Date stringToDate(String string) { String str = "yyyy-MM-dd hh:mm:ss"; SimpleDateFormat format = new SimpleDateFormat(str); Date date = new Date(); try { date = format.parse(string); } catch (Exception e) { e.getStackTrace(); } return date; } /** * 把指定的date類型日期轉換成Calendar類型 * * @author:tuzongxun * @Title: dateToCalendar * @param @param date * @return void * @date May 3, 2016 9:13:49 AM * @throws */ static Calendar dateToCalendar(Date date) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); return calendar; } }
又有哪些坑吶?
坑在哪裡:
在我之前接觸的一個項目中觸及到這麼一項功效:天天00:00:00把某些數據挪動到mongodb數據庫的另外一個聚集中,也就是關系型數據庫的表中。這個聚集名是一個固定的稱號加受騙前的兩個月前的日期地點的年和月份。
這個功效是在我接觸這個項目之前就曾經存在,也就是之前的同現實現的功效,寫了一個java的准時義務。
誰人同事現在曾經不在我們公司了,然則比來卻發明這個功效有些成績,數據的挪動其實不像估計那樣,本來應當存在2月的數據卻湧現在了1月的表中。
坑的本源:
mongodb相干的成績臨時歸我保護,這個成績也天然而然須要我來處理,因而便把他的代碼翻出來看了一遍。成果便發明了成績出在了calendar的相干辦法上。
要轉移兩個月前的數據,起首要獲得兩個月前的日期,他的生成表名的相干代碼是如許的:
private String getDataCollectionName() { Calendar calendar = Calendar.getInstance(); try { calendar.set(Calendar.DATE, -day); return "alarm_" + ToolUtils.dateToFormatStrDate(calendar.getTime(), "yyyy_MM"); } catch (Exception e) { logger.error("{}: data transformating failed,{}", this.getClass().getName(), e.getMessage()); } return null; }
成績恰是出在calendar的set辦法上,包含後來的查詢數據應用的開端和停止時光,也一樣用的是calendar.set(Calendar.DATE, -day);
這個辦法乍一看起來仿佛就是設置日期為以後日期減去指定的天數,然則現實上成果其實不是想象中的如許獲得兩個月前的日期(這裡的day它界說的是60,也就是兩個月)。
填坑:
找到緣由以後,我把這個辦法停止了調換,把set改成了add,至於裡邊的參數沒有去動,而成果證實這個辦法才是真正能完成以後功效的,獲得的成果也恰是料想中的成果。
固然了,也能夠不改辦法的同時把參數略做轉變,如calendar.set(Calendar.DATE, calendar.get(calendar.DATE)-day);
以上就是本文的全體內容,願望對年夜家控制Calendar時光操作經常使用辦法有所贊助。