【Java】自编时间相关常用函数
生活随笔
收集整理的這篇文章主要介紹了
【Java】自编时间相关常用函数
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
這個小的庫是之前自己寫Project的時候編的,經常會用,決定Share一下,希望對大家有用~~
先介紹一下有什么函數:
- 根據兩個Calendar計算歲數
- 根據生日的Long值計算歲數
- 把Calendar形式的時間轉換成Long
- 把Date形式的時間轉換成Long
- 判斷輸入的年月日是否合法(含閏年的相關內容)
- 時間格式轉換類——Long->“yyyy-MM-dd hh:mm:ss”
- 匹配生日和身份證號是否相符
- 基于身份證號,生成Long類型的生日
然后呢,直接放代碼吧——————(注釋應該是比較詳細的了)
import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date;/*** 時間處理類*/ public class TimeCalculator {//工具類,不允許被實例化private TimeCalculator(){}/*** 根據兩個時間計算歲數* @param nowTime* @param oldTime* @return*/public static int calculateAge(Calendar nowTime, Calendar oldTime) {int age = nowTime.get(Calendar.YEAR) - oldTime.get(Calendar.YEAR);if (nowTime.get(Calendar.MONTH) < oldTime.get(Calendar.MONTH)) {age--;} else if (nowTime.get(Calendar.MONTH) == oldTime.get(Calendar.MONTH) &&nowTime.get(Calendar.DATE) < oldTime.get(Calendar.DATE)) {age--;}return age;}/*** 根據生日的Long值計算歲數* @param birthday* @return*/public static int calculateAge(Long birthday) {Calendar nowTime = Calendar.getInstance();Calendar oldTime = Calendar.getInstance();oldTime.setTime(new Date(birthday));return calculateAge(nowTime, oldTime);}/*** 把Calendar形式的時間轉換成Long* @param calendar* @return*/public static Long calculateLongTime(Calendar calendar) {return calendar.getTimeInMillis();}/*** 把Date形式的時間轉換成Long* @param date* @return*/public static Long calculateLongTime(Date date) {Calendar calendar = Calendar.getInstance();calendar.setTime(date);return calendar.getTimeInMillis();}/*** 判斷是不是閏年* @param year* @return*/private static boolean judgeIsLeapYear(int year) {if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) {return true;}return false;}/*** 判斷閏年的日期* @param month* @param day* @return*/private static boolean judgeLeapYearDate(int month, int day) {switch (month) {case 4:case 6:case 9:case 11:if (day == 31) {return false;}case 2:if (day > 29) {return false;}}return true;}/*** 判斷非閏年的日期* @param month* @param day* @return*/private static boolean judgeNonLeapYearDate(int month, int day) {switch (month) {case 4:case 6:case 9:case 11:if (day == 31) {return false;}case 2:if (day > 28) {return false;}}return true;}/*** 判斷輸入的年月日是否合法* 比如說,2000.02.31不合理* @param time* @return*/public static boolean judgeDate(Calendar time) {int year = time.get(Calendar.YEAR);int month = time.get(Calendar.MONTH);int day = time.get(Calendar.DATE);if (judgeIsLeapYear(year) && judgeLeapYearDate(month, day)) {return true;} else if (!judgeIsLeapYear(year) && judgeNonLeapYearDate(month, day)) {return true;}return false;}/*** 時間格式轉換類* Long->"yyyy-MM-dd hh:mm:ss"* @param time* @return*/public static String transformTime(Long time){Date d = new Date(time);SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");return sdf.format(d);}/*** 匹配生日和身份證號是否相符* @param birthday* @param idNumber* @return*/public static boolean matchIdAndBirthday(Long birthday, String idNumber) {//還是先排空if (idNumber == null || birthday == null) {return false;}//小心:從0開始的+左閉右開//年份在第7-10位,索引是6-9String year = idNumber.substring(6, 10);//月份在第11-12位,索引是10-11String month = idNumber.substring(10, 12);//日期在第13-14位,索引是12-13String day = idNumber.substring(12, 14);//轉換時間Calendar time = Calendar.getInstance();time.setTime(new Date(birthday));//讀取年月日Integer yearInt = time.get(Calendar.YEAR);Integer monthInt = time.get(Calendar.MONTH);Integer dayInt = time.get(Calendar.DATE);//轉換成String,防止身份證報異常String yearStr = yearInt.toString();String monthStr = monthInt.toString();String dayStr = dayInt.toString();//年月日都要匹配if (year.equals(yearStr) && month.equals(monthStr) && day.equals(dayStr)) {return true;}return false;}/*** 基于身份證號,生成Long類型的生日* @param idNumber* @return*/public static Long generateLongBirthdayById(String idNumber) {//還是先排空if (idNumber == null) {return null;}//小心:從0開始的+左閉右開//年份在第7-10位,索引是6-9Integer year = Integer.parseInt(idNumber.substring(6, 10));//月份在第11-12位,索引是10-11Integer month = Integer.parseInt(idNumber.substring(10, 12));//日期在第13-14位,索引是12-13Integer date = Integer.parseInt(idNumber.substring(12, 14));//轉換時間Calendar birthday = Calendar.getInstance();//小心月份從0起birthday.set(year, --month, date);return birthday.getTimeInMillis();}}總結
以上是生活随笔為你收集整理的【Java】自编时间相关常用函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 字符串的排序不一定要完全按照字典序(洛谷
- 下一篇: java美元兑换,(Java实现) 美元