Android 实现当前日期,本周,本月,本年,上一天,下一天,上一周,下一周,上一月,下一月,上一年,下一年

先看效果图,再说遇到的需求。

 

需求:

根据左边自定义tab,切换图表展示样式,切换日期类型,展示时展示当日日期,当前周日期段,当前月日期段,当前年,可以通过左右两边箭头,切换一上天下一天,上一周下一周,上一月下一月,上一年下一年功能。当日期是当天,当周,当月,当年时,不可点击右侧箭头切换下一天,下一周,下一月,下一年。

具体实现:

第一步:获取当天日期,获取本周第一天和最后一天,获取本月第一天和最后一天,获取本年年份:

//获取当日日期
                //获取当前时间的时间戳
private long systemTime = System.currentTimeMillis();
private SimpleDateFormat mDateFormat = new SimpleDateFormat("yyyy年MM月dd日");

Date mDate = new Date(systemTime);
String textDate = mDateFormat.format(mDate);//年月日
//日期展示TextView
mTime_tv.setText(textDate);
//获取本周时间段,本周第一天和本周最后一天

Calendar mCalender = Calendar.getInstance();
private SimpleDateFormat mDateFormat = new SimpleDateFormat("yyyy年MM月dd日");
//通用的周一&周日时间戳变量
private long mWeekStartTime;
private long mWeekEndTime;

mCalender.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
String weekStart = mDateFormat.format(mCalender.getTime());
long nowWeekStart = mDateFormat.parse(weekStart).getTime();
mWeekStartTime = nowWeekStart;

Calendar ca = Calendar.getInstance();
ca.setFirstDayOfWeek(Calendar.MONDAY);
ca.set(Calendar.DAY_OF_WEEK, ca.getFirstDayOfWeek() + 6); // Sunday
String weekEnd = mDateFormat.format(ca.getTime());
long nowWeekEnd = mDateFormat.parse(weekEnd).getTime();
mWeekEndTime = nowWeekEnd;
mTime_tv.setText(weekStart + "——" + weekEnd);
//获取本月月初第一天和本月月末最后一天日期时间段

String startMonthTime = nowMonthStartTime(monthMultiple);
String endMonthTime = nowMonthEndTime(monthMultiple);
mTime_tv.setText(startMonthTime + "——" + endMonthTime);




private SimpleDateFormat mDateFormat = new SimpleDateFormat("yyyy年MM月dd日");
//获取本月的第一天和最后一天
    private String nowMonthStartTime(int monthMultiple) {
        Date date = new Date(systemTime);
        // 获取指定日期所在月的第一天
        Calendar calendar = Calendar.getInstance();
        // 设置指定日期
        calendar.setTime(date);
        calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH) + monthMultiple, 1);
        Date startDate = calendar.getTime();
        String dateStart = mDateFormat.format(startDate);
        return dateStart;
    }

    //获取本月最后一天
    private String nowMonthEndTime(int monthMultiple) {
        Date date = new Date(systemTime);
        Calendar calendarEnd = Calendar.getInstance();
        // 设置指定日期
        calendarEnd.setTime(date);
        calendarEnd.set(calendarEnd.get(Calendar.YEAR), calendarEnd.get(Calendar.MONTH) + monthMultiple, 1);
        // 最后一天
        calendarEnd.roll(Calendar.DATE, -1);
        Date dateend = calendarEnd.getTime();
        String dateEnd = mDateFormat.format(dateend);
        return dateEnd;
    }
//获取今年的年份
//下面的方法可以获取某年的第一天和某年的最后一天,通过SimpleDateFormat来进行决定。

/**
     * 获取某年第一天日期
     *
     * @param year 年份
     * @return Date
     */

    private String getYearFirst(int year) {
        Calendar calendar = Calendar.getInstance();
        calendar.clear();
        calendar.set(Calendar.YEAR, year);
        Date currYearFirst = calendar.getTime();
        String startTime = mYearFormat.format(currYearFirst);
        return startTime;
    }

    /**
     * 获取某年最后一天日期
     *
     * @param year 年份
     * @return Date
     */

    private String 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();
        String endTime = mYearFormat.format(currYearLast);
        return endTime;
    }

 //+1900是因为这个方法获取年份是1900开始计算的。
Date mDate = new Date(System.currentTimeMillis());
private int mYear = mDate.getYear() + 1900;;
SimpleDateFormat mYearFormat = new SimpleDateFormat("yyyy年");

//年
String yearFirst = getYearFirst(mYear);
String yearLast = getYearLast(mYear);
mTime_tv.setText(yearFirst);

第二步:

日期获取完之后,实现点击左右两边箭头,切换日期。

1):上一天:

Date mDate = new Date(System.currentTimeMillis())
private long oneDay = 24 * 60 * 60 * 1000;

//上一天
long lastOneDay = mDate.getTime() - oneDay;
mDate = new Date(lastOneDay);
SimpleDateFormat lastdateFormat = new SimpleDateFormat("yyyy年MM月dd日");
String lasttextDate = lastdateFormat.format(mDate);//年月日
mTime_tv.setText(lasttextDate);

2):下一天:

private Date mDate ;
private long oneDay = 24 * 60 * 60 * 1000;
private SimpleDateFormat mDateFormat = new SimpleDateFormat("yyyy年MM月dd日");

long nextOneDay = mDate.getTime() + oneDay;
mDate = new Date(nextOneDay);
String nextTextDate = mDateFormat.format(mDate);//年月日
mTime_tv.setText(nextTextDate);

3):上一周:

//通用的周一&周日时间戳变量,在获取当前周的周一和周末时有用到,切换上下周也要用
private long mWeekStartTime;
private long mWeekEndTime;
private long oneWeek = 24 * 60 * 60 * 1000 * 7;
private SimpleDateFormat mDateFormat = new SimpleDateFormat("yyyy年MM月dd日");


mWeekStartTime = mWeekStartTime - oneWeek;
mWeekEndTime = mWeekEndTime - oneWeek;

Date startTimeDate = new Date(mWeekStartTime);
Date endTimeDate = new Date(mWeekEndTime);
String startWeek = mDateFormat.format(startTimeDate);
String endWeek = mDateFormat.format(endTimeDate);

mTime_tv.setText(startWeek + "——" + endWeek);

4):下一周:

//通用的周一&周日时间戳变量,在获取当前周的周一和周末时有用到,切换上下周也要用
private long mWeekStartTime;
private long mWeekEndTime;
private long oneWeek = 24 * 60 * 60 * 1000 * 7;
private SimpleDateFormat mDateFormat = new SimpleDateFormat("yyyy年MM月dd日");

mWeekStartTime = mWeekStartTime + oneWeek;
mWeekEndTime = mWeekEndTime + oneWeek;
Date startTimeDate = new Date(mWeekStartTime);
Date endTimeDate = new Date(mWeekEndTime);
String startWeek = mDateFormat.format(startTimeDate);
String endWeek = mDateFormat.format(endTimeDate);
mTime_tv.setText(startWeek + "——" + endWeek);

5):上一月:

private int monthMultiple = 0;  //用来计数,上一月就减一,下一月就加1,当为0时不让下一月
private SimpleDateFormat mDateFormat = new SimpleDateFormat("yyyy年MM月dd日");
//点击事件中:

monthMultiple--;
String nextStartTime = nowMonthStartTime(monthMultiple);
String nextEndTime = nowMonthEndTime(monthMultiple);
mTime_tv.setText(nextStartTime + "——" + nextEndTime);



//获取本月的第一天和最后一天
    private String nowMonthStartTime(int monthMultiple) {
        Date date = new Date(systemTime);
        // 获取指定日期所在月的第一天
        Calendar calendar = Calendar.getInstance();
        // 设置指定日期
        calendar.setTime(date);
        calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH) + monthMultiple, 1);
        Date startDate = calendar.getTime();
        String dateStart = mDateFormat.format(startDate);
        return dateStart;
    }

    //获取本月最后一天
    private String nowMonthEndTime(int monthMultiple) {
        Date date = new Date(systemTime);
        Calendar calendarEnd = Calendar.getInstance();
        // 设置指定日期
        calendarEnd.setTime(date);
        calendarEnd.set(calendarEnd.get(Calendar.YEAR), calendarEnd.get(Calendar.MONTH) + monthMultiple, 1);
        // 最后一天
        calendarEnd.roll(Calendar.DATE, -1);
        Date dateend = calendarEnd.getTime();
        String dateEnd = mDateFormat.format(dateend);
        return dateEnd;
    }

6):下一月:

private int monthMultiple = 0;  //用来计数,上一月就减一,下一月就加1,当为0时不让下一月
private SimpleDateFormat mDateFormat = new SimpleDateFormat("yyyy年MM月dd日");
//点击事件中:
monthMultiple++;
String nextStartTime = nowMonthStartTime(monthMultiple);
String nextEndTime = nowMonthEndTime(monthMultiple);
mTime_tv.setText(nextStartTime + "——" + nextEndTime);

//获取本月的第一天和最后一天
    private String nowMonthStartTime(int monthMultiple) {
        Date date = new Date(systemTime);
        // 获取指定日期所在月的第一天
        Calendar calendar = Calendar.getInstance();
        // 设置指定日期
        calendar.setTime(date);
        calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH) + monthMultiple, 1);
        Date startDate = calendar.getTime();
        String dateStart = mDateFormat.format(startDate);
        return dateStart;
    }

    //获取本月最后一天
    private String nowMonthEndTime(int monthMultiple) {
        Date date = new Date(systemTime);
        Calendar calendarEnd = Calendar.getInstance();
        // 设置指定日期
        calendarEnd.setTime(date);
        calendarEnd.set(calendarEnd.get(Calendar.YEAR), calendarEnd.get(Calendar.MONTH) + monthMultiple, 1);
        // 最后一天
        calendarEnd.roll(Calendar.DATE, -1);
        Date dateend = calendarEnd.getTime();
        String dateEnd = mDateFormat.format(dateend);
        return dateEnd;
    }

7):上一年:

private Date mDate = new Date(System.currentTimeMillis());
private int mChangeYear = mDate.getYear() + 1900;
private SimpleDateFormat mYearFormat = new SimpleDateFormat("yyyy年");
//点击事件
//上一年
mChangeYear--;
String yearFirst = getYearFirst(mChangeYear);
mTime_tv.setText(yearFirst);

/**
     * 获取某年第一天日期
     *
     * @param year 年份
     * @return Date
     */

    private String getYearFirst(int year) {
        Calendar calendar = Calendar.getInstance();
        calendar.clear();
        calendar.set(Calendar.YEAR, year);
        Date currYearFirst = calendar.getTime();
        String startTime = mYearFormat.format(currYearFirst);
        return startTime;
    }

8):下一年:

private Date mDate = new Date(System.currentTimeMillis());
private int mChangeYear = mDate.getYear() + 1900;
private SimpleDateFormat mYearFormat = new SimpleDateFormat("yyyy年");
//点击事件
mChangeYear ++;
String yearFirst = getYearFirst(mChangeYear);
mTime_tv.setText(yearFirst);

/**
     * 获取某年第一天日期
     *
     * @param year 年份
     * @return Date
     */

    private String getYearFirst(int year) {
        Calendar calendar = Calendar.getInstance();
        calendar.clear();
        calendar.set(Calendar.YEAR, year);
        Date currYearFirst = calendar.getTime();
        String startTime = mYearFormat.format(currYearFirst);
        return startTime;
    }

注:顺便提一嘴,图中的图表,是使用的百度echarts,很强大,主页有使用百度echarts的教程和免费demo,需要的可以自行查看。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
你可以使用 MySQL 的内置函数 `DATE_FORMAT()` 和 `NOW()` 来获取本周第一天本月第一天本年第一天的值。 查询本周第一天的 SQL 语句如下: ``` SELECT DATE_FORMAT(NOW() - INTERVAL WEEKDAY(NOW()) DAY ,'%Y-%m-%d'); ``` 查询本月第一天的 SQL 语句如下: ``` SELECT DATE_FORMAT(NOW() ,'%Y-%m-01'); ``` 查询本年第一天的 SQL 语句如下: ``` SELECT DATE_FORMAT(NOW() ,'%Y-01-01'); ``` 在 MyBatis 的映射文件 `TrendMapper.xml` 中,你需要添加三个参数,分别对应本周第一天本月第一天本年第一天的值。然后在 SQL 语句中使用这三个参数来替换原来的日期值。 修改后的 SQL 语句如下: ``` SELECT DATE_FORMAT(statistics_date, '%Y-%m-%d') as statisticsDate, COUNT(*) as lotteryWinCount FROM t_lottery_statistics_prize WHERE statistics_date BETWEEN #{weekBegin} AND NOW() AND statistics_date >= #{monthBegin} AND statistics_date >= #{yearBegin} GROUP BY DATE_FORMAT(statistics_date, '%Y-%m-%d') ORDER BY DATE_FORMAT(statistics_date, '%Y-%m-%d') DESC ``` 其中,`#{weekBegin}`、`#{monthBegin}` 和 `#{yearBegin}` 分别对应本周第一天本月第一天本年第一天的参数。 在 Java 代码中,你需要定义这三个参数的值,并将它们传递给 MyBatis 的 SQL 语句。 示例代码如下: ```java public List<Trend> selectTrend() { Date weekBegin = ... // 计算本周第一天的值 Date monthBegin = ... // 计算本月第一天的值 Date yearBegin = ... // 计算本年第一天的值 Map<String, Object> paramMap = new HashMap<>(); paramMap.put("weekBegin", weekBegin); paramMap.put("monthBegin", monthBegin); paramMap.put("yearBegin", yearBegin); return sqlSession.selectList("com.yuxiang.dtsociety.lottery.dao.TrendDao.selectTrend", paramMap); } ``` 其中,`weekBegin`、`monthBegin` 和 `yearBegin` 参数是新增的。在 `paramMap` 中,将这三个参数都传递给 MyBatis 的 SQL 语句。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值