android的日期工具,Android 时间工具类(时间和日期的获取)

这是一个Java类,提供了多种日期和时间处理方法,包括获取当前时间戳、当前日期、年份的第一天和最后一天、某年周数计算、一年的最大周数、周的开始和结束日期等。此外,还包括了判断日期是否在指定区间内以及获取一年的第一周和最后一天的日期等实用功能。
摘要由CSDN通过智能技术生成

public class DateUtil {

public static final String DATE_FORMAT = "yyyy-MM-dd";

private static SimpleDateFormat sdf = new SimpleDateFormat("MM/dd");

private static SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy/MM/dd");

/**

* 获取当前时间

*/

public static long getCurrentTime() {

try {

return SystemClock.elapsedRealtime();

} catch (Exception var3) {

var3.printStackTrace();

return System.currentTimeMillis();

}

}

public static String getCurrentTime(String format) {

return new SimpleDateFormat(format).format(new Date(getCurrentTime()));

}

/**

* 获取今天(yyyy-MM-dd)的时间戳

*/

public static long getCurrentDate(Context context) {

String currentTime = DateUtil.getCurrentTime(DateUtil.DATE_FORMAT);

SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");

try {

Date currentDate = df.parse(currentTime);

return currentDate.getTime();

} catch (ParseException e) {

e.printStackTrace();

}

return new Date().getTime();

}

/**

* 获取某年第一天日期

*/

public static Date getYearFirst(int year) {

Calendar calendar = Calendar.getInstance();

calendar.clear();

calendar.set(Calendar.YEAR, year);

Date currYearFirst = calendar.getTime();

return currYearFirst;

}

/**

* 获取某年最后一天日期

*/

public static Date getYearLast(int year) {

Calendar calendar = Calendar.getInstance();

calendar.clear();

calendar.set(Calendar.YEAR, year);

calendar.roll(Calendar.DAY_OF_YEAR, -1);

Date currYearLast = calendar.getTime();

return currYearLast;

}

/**

* 获取当前时间所在年的周数

*/

public static int getWeekOfYear(Date date) {

Calendar c = new GregorianCalendar();

c.setFirstDayOfWeek(Calendar.MONDAY);

c.setMinimalDaysInFirstWeek(7);

c.setTime(date);

return c.get(Calendar.WEEK_OF_YEAR);

}

/**

* 获取当前时间所在年的最大周数

*/

public static int getMaxWeekNumOfYear(int year) {

Calendar c = new GregorianCalendar();

c.set(year, Calendar.DECEMBER, 31, 23, 59, 59);

return getWeekOfYear(c.getTime());

}

/**

* 获取某年的第几周的开始日期

*/

public static Date getFirstDayOfWeek(int year, int week) {

Calendar c = getFirstDayOfWeek(year);

Calendar cal = (GregorianCalendar) c.clone();

cal.add(Calendar.DATE, week * 7);

return getFirstDayOfWeek(cal.getTime());

}

/**

* 获取某年的第几周的结束日期

*/

public static Date getLastDayOfWeek(int year, int week) {

Calendar c = getFirstDayOfWeek(year);

Calendar cal = (GregorianCalendar) c.clone();

cal.add(Calendar.DATE, week * 7);

return getLastDayOfWeek(cal.getTime());

}

/**

* 获取一年开始的第一周的周一

* 第一周如果有四天或以上就算是该年的第一周,

* 否则就是上一年的最后一周(用于跨年判断第一周开始时间)

*/

public static Calendar getFirstDayOfWeek(int year) {

Calendar c = new GregorianCalendar();

c.set(year, Calendar.JANUARY, 1, 0, 0, 0);

int dayOfWeek = c.get(Calendar.DAY_OF_WEEK);

// 如果1月1日是周五,周六或者周日,那么这一周是上一年最后一周,重新计算今年的第一周开始的周一

if (dayOfWeek == Calendar.FRIDAY || dayOfWeek == Calendar.SATURDAY || dayOfWeek == Calendar.SUNDAY) {

while (c.get(Calendar.DAY_OF_WEEK) != Calendar.MONDAY) {

c.add(Calendar.DAY_OF_YEAR, 1);

}

}

return c;

}

/**

* 获取当前时间所在周的开始日期

*/

public static Date getFirstDayOfWeek(Date date) {

Calendar c = new GregorianCalendar();

c.setFirstDayOfWeek(Calendar.MONDAY);

c.setTime(date);

c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek()); // Monday

return c.getTime();

}

/**

* 获取当前时间所在周的结束日期

*/

@SuppressLint("WrongConstant")

public static Date getLastDayOfWeek(Date date) {

Calendar c = new GregorianCalendar();

c.setFirstDayOfWeek(Calendar.MONDAY);

c.setTime(date);

c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek() + 6); // Sunday

return c.getTime();

}

/**

* 判断该年的最后一天(xxxx年12月31日)所在的周是不是当年的最后一周,

* 否则就是下一年的第一周

*/

public static boolean isLastDayInYearLastWeek(Date lastDate) {

boolean result = false;

Calendar c = new GregorianCalendar();

c.setTime(lastDate);

int lastDay = c.get(Calendar.DAY_OF_WEEK);

// 当lastDay是周四、五、六、日, 它所在周就是是该年的最后一周

if (lastDay == Calendar.THURSDAY || lastDay == Calendar.FRIDAY || lastDay == Calendar.SATURDAY || lastDay == Calendar.SUNDAY) {

result = true;

}

return result;

}

/**

* 获取一年的最后一天

*/

public static Date getLastDayOfYear(int year) {

Calendar c = new GregorianCalendar();

c.set(year, Calendar.DECEMBER, 31, 0, 0, 0);

return c.getTime();

}

/**

* 判断当前时间是否在[startTime, endTime]区间,注意时间格式要一致

*/

public static boolean isEffectiveDate(Date nowTime, Date startTime, Date endTime) {

if (Math.abs(nowTime.getTime() - startTime.getTime()) < 1000 ||

Math.abs(nowTime.getTime() - endTime.getTime()) < 1000) {

return true;

}

Calendar date = new GregorianCalendar();

date.setTime(nowTime);

Calendar begin = new GregorianCalendar();

begin.setTime(startTime);

Calendar end = new GregorianCalendar();

end.setTime(endTime);

if (date.after(begin) && date.before(end)) {

return true;

} else {

return false;

}

}

/**

* 获取一年第一周的第一天 和 最后一周的最后一天

*/

public static Date[] getYearMinDayAndMasDay(int currentYear) {

Date[] resultDate = new Date[2];

List weeks = getWeeksByYear(currentYear);

Week week0 = weeks.get(0);

Week week1 = weeks.get(weeks.size() - 1);

Date minDate = week0.getWeekBeginDate();

Date maxDate = week1.getWeekEndDate();

resultDate[0] = minDate;

resultDate[1] = maxDate;

return resultDate;

}

/**

* 根据当前日期算出所在周的开始时间和结束时间

*/

public static String[] getWeekStartAndEndDay(Date currentDate) {

String[] weekDay = new String[2];

Date firstDayOfWeek = DateUtil.getFirstDayOfWeek(currentDate);

Date lastDayOfWeek = DateUtil.getLastDayOfWeek(currentDate);

weekDay[0] = sdf2.format(firstDayOfWeek.getTime());

weekDay[1] = sdf2.format(lastDayOfWeek.getTime());

return weekDay;

}

/**

* 获取一年中每周的范围

*/

public static List getWeeksByYear(int currentYear) {

ArrayList weekList = new ArrayList<>();

Date lastDay = DateUtil.getLastDayOfYear(currentYear);

boolean result = DateUtil.isLastDayInYearLastWeek(lastDay);

// 一年最多有53个星期

for (int i = 0; i < 53; i++) {

Date firstDayOfWeek = DateUtil.getFirstDayOfWeek(currentYear, i);

Date lastDayOfWeek = DateUtil.getLastDayOfWeek(currentYear, i);

Calendar startCal = Calendar.getInstance();

startCal.setTime(firstDayOfWeek);

Calendar endCal = Calendar.getInstance();

endCal.setTime(lastDayOfWeek);

String WeekNumStr = String.valueOf(i + 1);

if (i < 9) {

WeekNumStr = "0" + (i + 1);

}

Week everyWeek = new Week();

everyWeek.setBeginYear(startCal.get(Calendar.YEAR));

everyWeek.setEndYear(endCal.get(Calendar.YEAR));

everyWeek.setWeekBegin(sdf.format(startCal.getTime()));

everyWeek.setWeekEnd(sdf.format(endCal.getTime()));

everyWeek.setWeekNum(WeekNumStr);

if (i <= 50) {

weekList.add(everyWeek);

}

if (i > 50) {

// 判断最后一天是否在这区间内

if (DateUtil.isEffectiveDate(lastDay, firstDayOfWeek, lastDayOfWeek)) {

// 判断该年的最后一天(xxxx年12月31日)所在的周是不是当年的最后一周

if (result) {

weekList.add(everyWeek);

}

break;

} else {

weekList.add(everyWeek);

}

}

}

return weekList;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值