Android DateUtil時(shí)間工具類使用方法示例解析
引言
時(shí)間在軟件開發(fā)中是一個(gè)常見的處理需求,包括獲取當(dāng)前時(shí)間、時(shí)間格式化、時(shí)間比較、時(shí)間差計(jì)算等操作。為了簡(jiǎn)化開發(fā)過程,可以編寫一個(gè)時(shí)間工具類來封裝這些常用的時(shí)間操作方法。
因工具類時(shí)間類主要分格式化和時(shí)間計(jì)算所以做一個(gè)拆分
DateUtil.java 主要功能格式化時(shí)間工具類
TimeUtil.java 時(shí)間工具處理類
DateUtil 時(shí)間工具類
功能介紹
時(shí)間工具類封裝了以下常用功能:
- 獲取當(dāng)前時(shí)間:獲取系統(tǒng)當(dāng)前的日期和時(shí)間。
- 格式化時(shí)間:將日期對(duì)象或時(shí)間戳格式化為指定的時(shí)間格式。
- 解析時(shí)間:將字符串時(shí)間解析為日期對(duì)象。
- 獲取時(shí)間差:計(jì)算兩個(gè)日期之間的時(shí)間差,包括天數(shù)、小時(shí)數(shù)、分鐘數(shù)等。
- 判斷時(shí)間區(qū)間:判斷指定時(shí)間是否在給定的時(shí)間區(qū)間內(nèi)。
- 判斷閏年:判斷指定年份是否為閏年。
- 獲取年份、月份、星期等:從日期對(duì)象中提取年份、月份、星期等信息。
主要方法和功能
getCurrentDate(String pattern):獲取當(dāng)前時(shí)間的字符串表示。formatToStr(long timestamp, String pattern):將時(shí)間戳格式化為指定格式的字符串。formatToStr(Date date, String pattern):將日期對(duì)象格式化為指定格式的字符串。formatStringDate(String dateString, String format):將字符串時(shí)間按照指定格式進(jìn)行格式化。getCurrentTime():獲取當(dāng)前時(shí)間的日期對(duì)象。formatTime(Date date, String pattern):將日期對(duì)象格式化為指定格式的時(shí)間字符串。parseTime(String time, String pattern):解析指定格式的時(shí)間字符串為日期對(duì)象。getTimeDifference(Date date1, Date date2, TimeUnit timeUnit):計(jì)算兩個(gè)日期之間的時(shí)間差。isInTimeRange(Date time, Date startTime, Date endTime):判斷指定時(shí)間是否在給定時(shí)間區(qū)間內(nèi)。isLeapYear(int year):判斷指定年份是否為閏年。getYearFromDate(Date date):獲取指定日期對(duì)象的年份。getMonthFromDate(Date date):獲取指定日期對(duì)象的月份。getWeekdayFromDate(Date date):獲取指定日期對(duì)象的星期。
常見用法示例
// 獲取當(dāng)前時(shí)間 Date currentTime = DateUtil.getCurrentTime(); // 格式化時(shí)間 String formattedTime = DateUtil.formatTime(currentTime, DateUtil.FORMAT_YYYY_MM_DD_HH_MM_SS); // 解析時(shí)間 String timeString = "2023-07-14 12:00:00"; Date parsedTime = DateUtil.parseTime(timeString, DateUtil.FORMAT_YYYY_MM_DD_HH_MM_SS); // 獲取時(shí)間差 Date startTime = new Date(); Date endTime = new Date(System.currentTimeMillis() + TimeUnit.HOURS.toMillis(2)); long timeDifference = DateUtil.getTimeDifference(startTime, endTime, TimeUnit.MINUTES); // 判斷時(shí)間區(qū)間 Date time = new Date(); Date startTime = new Date(System.currentTimeMillis() - TimeUnit.DAYS.toMillis(1)); Date endTime = new Date(System.currentTimeMillis() + TimeUnit.DAYS.toMillis(1)); boolean isInTimeRange = DateUtil.isInTimeRange(time, startTime, endTime); // 判斷閏年 int year = 2023; boolean isLeapYear = DateUtil.isLeapYear(year); // 獲取年份、月份、星期 int yearFromDate = DateUtil.getYearFromDate(currentTime); int monthFromDate = DateUtil.getMonthFromDate(currentTime); int weekdayFromDate = DateUtil.getWeekdayFromDate(currentTime);
示例代碼
以下是一個(gè)簡(jiǎn)單的時(shí)間工具類的示例代碼:
import androidx.core.net.ParseException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;
import java.util.concurrent.TimeUnit;
/**
* @author: xtxiaolu
* @date: 2023/7/14
* 描述: 主要功能格式化時(shí)間工具類
*/
public class DateUtil {
// 日期格式年份,例如:2022,2023
public static final String FORMAT_YYYY = "yyyy";
// 其他格式常量...
private static final TimeZone DEFAULT_TIMEZONE = TimeZone.getDefault();
private static TimeZone DefaultTimeZone = TimeZone.getDefault();
/**
* 獲取當(dāng)前時(shí)間的字符串表示
*
* @param pattern 時(shí)間格式
* @return 當(dāng)前時(shí)間的字符串表示
*/
public static String getCurrentDate(String pattern) {
return formatToStr(new Date(), pattern);
}
/**
* 將時(shí)間戳格式化為指定格式的字符串
*
* @param timestamp 時(shí)間戳
* @param pattern 時(shí)間格式
* @return 格式化后的時(shí)間字符串
*/
public static String formatToStr(long timestamp, String pattern) {
return formatToStr(new Date(timestamp), pattern);
}
/**
* 將日期對(duì)象格式化為指定格式的字符串
*
* @param date 日期對(duì)象
* @param pattern 時(shí)間格式
* @return 格式化后的時(shí)間字符串
*/
public static String formatToStr(Date date, String pattern) {
DateFormat dateFormat = getDateFormat(pattern);
return dateFormat.format(date);
}
/**
* 獲取指定格式的日期格式化對(duì)象
*
* @param pattern 時(shí)間格式
* @return 日期格式化對(duì)象
*/
private static DateFormat getDateFormat(String pattern) {
SimpleDateFormat dateFormat = new SimpleDateFormat(pattern);
dateFormat.setTimeZone(DEFAULT_TIMEZONE);
return dateFormat;
}
/**
* 格式化字符串時(shí)間為指定格式
*
* @param dateString 字符串時(shí)間
* @param format 格式
* @return 格式化后的時(shí)間字符串
*/
public static String formatStringDate(String dateString, String format) {
SimpleDateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
SimpleDateFormat outputFormat = new SimpleDateFormat(format);
try {
Date date = inputFormat.parse(dateString);
return outputFormat.format(date);
} catch (ParseException | java.text.ParseException e) {
e.printStackTrace();
}
return "";
}
/**
* 獲取當(dāng)前時(shí)間的日期對(duì)象
*
* @return 當(dāng)前時(shí)間的日期對(duì)象
*/
public static Date getCurrentTime() {
return new Date();
}
/**
* 將日期對(duì)象格式化為指定格式的時(shí)間字符串
*
* @param date 日期對(duì)象
* @param pattern 時(shí)間格式
* @return 格式化后的時(shí)間字符串
*/
public static String formatTime(Date date, String pattern) {
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
return sdf.format(date);
}
/**
* 解析指定格式的時(shí)間字符串為日期對(duì)象
*
* @param time 時(shí)間字符串
* @param pattern 時(shí)間格式
* @return 解析后的日期對(duì)象
* @throws ParseException 解析異常
*/
public static Date parseTime(String time, String pattern) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
try {
return sdf.parse(time);
} catch (java.text.ParseException e) {
throw new RuntimeException(e);
}
}
/**
* 計(jì)算兩個(gè)日期之間的時(shí)間差,返回指定時(shí)間單位的差值
*
* @param date1 第一個(gè)日期對(duì)象
* @param date2 第二個(gè)日期對(duì)象
* @param timeUnit 時(shí)間單位
* @return 時(shí)間差的差值
*/
public static long getTimeDifference(Date date1, Date date2, TimeUnit timeUnit) {
long difference = date2.getTime() - date1.getTime();
return timeUnit.convert(difference, TimeUnit.MILLISECONDS);
}
/**
* 判斷指定時(shí)間是否在給定時(shí)間區(qū)間內(nèi)
*
* @param time 待判斷的時(shí)間
* @param startTime 時(shí)間區(qū)間的開始時(shí)間
* @param endTime 時(shí)間區(qū)間的結(jié)束時(shí)間
* @return 如果指定時(shí)間在時(shí)間區(qū)間內(nèi),返回 true;否則返回 false
*/
public static boolean isInTimeRange(Date time, Date startTime, Date endTime) {
return time.after(startTime) && time.before(endTime);
}
/**
* 判斷指定年份是否為閏年
*
* @param year 年份
* @return 如果是閏年,返回 true;否則返回 false
*/
public static boolean isLeapYear(int year) {
return (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;
}
/**
* 獲取指定日期對(duì)象的年份
*
* @param date 日期對(duì)象
* @return 年份
*/
public static int getYearFromDate(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
return calendar.get(Calendar.YEAR);
}
/**
* 獲取指定日期對(duì)象的月份
*
* @param date 日期對(duì)象
* @return 月份
*/
public static int getMonthFromDate(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
return calendar.get(Calendar.MONTH) + 1;
}
/**
* 獲取指定日期對(duì)象的星期
*
* @param date 日期對(duì)象
* @return 星期,1 表示星期一,2 表示星期二,依次類推
*/
public static int getWeekdayFromDate(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
return calendar.get(Calendar.DAY_OF_WEEK);
}
}TimeUtil 時(shí)間工具類
時(shí)間工具類提供了一系列用于處理時(shí)間的方法,包括獲取當(dāng)前時(shí)間、格式化時(shí)間、判斷時(shí)間區(qū)間、計(jì)算時(shí)間差等功能。該工具類基于最新的Android API,并提供了更加簡(jiǎn)潔和易用的方法。
方法列表
getCurrentWeekOfMonth(): 獲取當(dāng)前時(shí)間為本月的第幾周。getCurrentDayOfWeek(): 獲取當(dāng)前時(shí)間為本周的第幾天。getCurrentDayOfWeekText(): 返回當(dāng)前日期是星期幾的文本表示。isTimeInRange(time, startTime, endTime): 判斷指定時(shí)間是否在給定的時(shí)間區(qū)間內(nèi)。isTimeInRange(time, startTime, endTime): 判斷指定時(shí)間是否在給定的時(shí)間區(qū)間內(nèi)。isInTimeRange(currentTime, startTime, endTime): 判斷指定時(shí)間是否在給定的時(shí)間區(qū)間內(nèi)。calculateDaysDifference(startDate, endDate): 計(jì)算兩個(gè)日期之間相差的天數(shù)。calculateTimeDifference(date): 返回友好的時(shí)間跨度表示。
方法示例
// 獲取當(dāng)前時(shí)間為本月的第幾周 int weekOfMonth = TimeUtil.getCurrentWeekOfMonth(); // 獲取當(dāng)前時(shí)間為本周的第幾天 int dayOfWeek = TimeUtil.getCurrentDayOfWeek(); // 返回當(dāng)前日期是星期幾的文本表示 String dayOfWeekText = TimeUtil.getCurrentDayOfWeekText(); // 判斷指定時(shí)間是否在時(shí)間區(qū)間內(nèi) boolean isInRange = TimeUtil.isTimeInRange(time, startTime, endTime); // 計(jì)算兩個(gè)日期之間相差的天數(shù) long daysDifference = TimeUtil.calculateDaysDifference(startDate, endDate); // 返回友好的時(shí)間跨度表示 String timeDifference = TimeUtil.calculateTimeDifference(date);
示例代碼
import java.text.DateFormatSymbols;
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
import java.util.concurrent.TimeUnit;
/**
* @author: xtxiaolu
* @date: 2023/7/14
* 描述:時(shí)間工具處理類
*/
public class TimeUtil {
/**
* 獲取當(dāng)前時(shí)間為本月的第幾周
*
* @return 本月的第幾周
*/
public static int getCurrentWeekOfMonth() {
Calendar calendar = Calendar.getInstance();
int weekOfMonth = calendar.get(Calendar.WEEK_OF_MONTH);
return weekOfMonth;
}
/**
* 獲取當(dāng)前時(shí)間為本周的第幾天
*
* @return 本周的第幾天(1代表周一,7代表周日)
*/
public static int getCurrentDayOfWeek() {
LocalDate currentDate = LocalDate.now();
DayOfWeek dayOfWeek = currentDate.getDayOfWeek();
int dayOfWeekValue = dayOfWeek.getValue();
return dayOfWeekValue;
}
/**
* 返回當(dāng)前日期是星期幾
*
* @return 例如:星期日、星期一、星期六等等。
*/
public static String getCurrentDayOfWeekText() {
Calendar calendar = Calendar.getInstance();
int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
// 獲取星期幾文本
DateFormatSymbols symbols = new DateFormatSymbols(Locale.getDefault());
String[] dayOfWeekTexts = symbols.getWeekdays();
if (dayOfWeek >= Calendar.SUNDAY && dayOfWeek <= Calendar.SATURDAY) {
return dayOfWeekTexts[dayOfWeek];
} else {
return "";
}
}
/**
* 判斷指定時(shí)間是否在時(shí)間區(qū)間內(nèi)
*
* @param time 待判斷的時(shí)間
* @param startTime 時(shí)間區(qū)間的開始時(shí)間
* @param endTime 時(shí)間區(qū)間的結(jié)束時(shí)間
* @return 如果指定時(shí)間在時(shí)間區(qū)間內(nèi),返回 true;否則返回 false
*/
public static boolean isTimeInRange(Calendar time, Calendar startTime, Calendar endTime) {
return time.compareTo(startTime) >= 0 && time.compareTo(endTime) <= 0;
}
/**
* 判斷指定時(shí)間是否在時(shí)間區(qū)間內(nèi)
*
* @param time 待判斷的時(shí)間
* @param startTime 時(shí)間區(qū)間的開始時(shí)間
* @param endTime 時(shí)間區(qū)間的結(jié)束時(shí)間
* @return 如果指定時(shí)間在時(shí)間區(qū)間內(nèi),返回 true;否則返回 false
*/
public static boolean isTimeInRange(LocalDateTime time, LocalDateTime startTime, LocalDateTime endTime) {
return time.compareTo(startTime) >= 0 && time.compareTo(endTime) <= 0;
}
/**
* 判斷指定時(shí)間是否在時(shí)間區(qū)間內(nèi)
*
* @param currentTime 待判斷的時(shí)間
* @param startTime 時(shí)間區(qū)間的開始時(shí)間
* @param endTime 時(shí)間區(qū)間的結(jié)束時(shí)間
* @return 如果指定時(shí)間在時(shí)間區(qū)間內(nèi),返回 true;否則返回 false
*/
public static boolean isInTimeRange(Date currentTime, Date startTime, Date endTime) {
long currentTimeMillis = currentTime.getTime();
return currentTimeMillis >= startTime.getTime() && currentTimeMillis <= endTime.getTime();
}
/**
* 求兩個(gè)日期相差天數(shù)
* @param startDate 開始時(shí)間
* @param endDate 結(jié)束時(shí)間
* @return 相差天數(shù)
*/
public static long calculateDaysDifference(Date startDate, Date endDate) {
long differenceMillis = endDate.getTime() - startDate.getTime();
long differenceDays = TimeUnit.MILLISECONDS.toDays(differenceMillis);
return differenceDays;
}
/**
* 返回友好時(shí)間跨度
*
* @param date 需要格式化的時(shí)間
*
* @return the fit time span
* return 小于1分鐘,返回"剛剛"
* return 小于1小時(shí)但大于0分鐘,返回"X分鐘前"
* return 小于1天但大于0小時(shí),返回"X小時(shí)前"
* return 昨天,返回"昨天"
* return 大于1天,返回"X天前"
*/
public static String calculateTimeDifference(Date date) {
long currentTime = System.currentTimeMillis();
long timeDifference = currentTime - date.getTime();
// 計(jì)算時(shí)間差對(duì)應(yīng)的單位
long seconds = timeDifference / 1000;
long minutes = seconds / 60;
long hours = minutes / 60;
long days = hours / 24;
if (days > 1) {
// 大于1天,返回"X天前"
return days + "天前";
} else if (days == 1) {
// 昨天,返回"昨天"
return "昨天";
} else if (hours > 0) {
// 小于1天但大于0小時(shí),返回"X小時(shí)前"
return hours + "小時(shí)前";
} else if (minutes > 0) {
// 小于1小時(shí)但大于0分鐘,返回"X分鐘前"
return minutes + "分鐘前";
} else {
// 小于1分鐘,返回"剛剛"
return "剛剛";
}
}
}如果以上的時(shí)間工具類對(duì)您有所幫助,請(qǐng)不吝點(diǎn)贊和收藏。這個(gè)工具類旨在簡(jiǎn)化時(shí)間處理的操作,提供了一系列方便易用的方法,幫助您更高效地處理時(shí)間相關(guān)的業(yè)務(wù)邏輯。
無論是獲取當(dāng)前時(shí)間的某個(gè)特定值,還是計(jì)算時(shí)間差、判斷時(shí)間區(qū)間,亦或是格式化時(shí)間,該工具類都能滿足您的需求。
使用這個(gè)工具類,您可以更輕松地處理時(shí)間操作,提高開發(fā)效率。如果您覺得這個(gè)工具類有用,請(qǐng)給予您的支持,以便將它收藏起來方便日后使用。
更多關(guān)于Android DateUtil時(shí)間工具類的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Android實(shí)現(xiàn)簡(jiǎn)潔的APP更新dialog數(shù)字進(jìn)度條
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)簡(jiǎn)潔的APP更新dialog數(shù)字進(jìn)度條,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-04-04
Android中LinearLayout布局的常用屬性總結(jié)
這篇文章主要介紹了Android中LinearLayout布局的常用屬性總結(jié),包括居中、重心、比例等線性布局中的基本設(shè)置,需要的朋友可以參考下2016-04-04
Android判斷App前臺(tái)運(yùn)行還是后臺(tái)運(yùn)行(運(yùn)行狀態(tài))
這篇文章主要介紹了Android判斷App前臺(tái)運(yùn)行還是后臺(tái)運(yùn)行的相關(guān)資料,需要的朋友可以參考下2016-04-04
Android?掃碼槍輸入時(shí)屏蔽軟鍵盤和頂部狀態(tài)欄的解決方案
在Android設(shè)備上,使用掃碼槍時(shí)常遇到軟鍵盤和頂部狀態(tài)欄顯示問題,本文介紹了在Android 7.1.2版本上,如何通過設(shè)置inputType為none屏蔽軟鍵盤,以及通過hideStatusBar和NoActionBar方法隱藏頂部狀態(tài)欄,以優(yōu)化掃碼槍使用界面,這些方法有助于提升使用掃碼槍場(chǎng)景的用戶體驗(yàn)2024-10-10
android游戲載入的activity跳轉(zhuǎn)到游戲主菜單的activity具體實(shí)現(xiàn)
停止2s后由游戲載入頁(yè)面再跳轉(zhuǎn)到游戲菜單頁(yè)面,具體實(shí)現(xiàn)代碼如下,感興趣的朋友可以參考下哈2013-06-06
Android實(shí)現(xiàn)button居中的方法
這篇文章主要介紹了Android實(shí)現(xiàn)button居中的方法,涉及Android的XML布局技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-09-09

