字符串类型的日期解析

 @Test
    public void test() {
        String birthday = "2022-03-23T16:00:00.000Z";
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
        try {
            //字符串转date
            Date time = simpleDateFormat.parse(birthday);
            System.out.println(time);
            //date转字符串
            System.out.println(simpleDateFormat.format(time));
            System.out.println(time.toLocaleString().split(" ")[0]);
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }

Vue 框架使用时间插件:

案例一:

<template>
<el-date-picker
	type="month"
	v-model="yearMonth"
	format="yyyy-MM"
    value-format="yyyy-MM"
	:picker-options="pickerOptions"
>
</template>
<script>
	export default {
	  data () {
	    return {
	      pickerOptions: {
	      // 限制时分秒
	      	selectableRange: ['12:00:00 - 23:59:59'],
	      // 限制年月日
	        disabledDate:(time)=>{  // time为el-date-picker选择器的时间
	          const date = new Date()  // 获取当前时间
	          const year = date.getFullYear() // 转化当前年度    
	          let month = date.getMonth() + 1  // 转化当前月份 需+1 
	          if (month >= 1 && month <= 9) {   // 为1-9月前加上0  比如: 03
	            month = '0' + month
	          }
	          const currentDate = year.toString() + month.toString() //  将年份和月份拼接 202110
	          const timeYear = time.getFullYear()  //  将el-date-picker选择器转化为年份
	          let timeMonth = time.getMonth() + 1    //  将el-date-picker选择器时间转化为月份
	          if (timeMonth >= 1 && timeMonth <= 9) {  // 为1-9月前加上0  比如: 03
	             timeMonth = '0' + timeMonth
	           }
	          const timeDate = timeYear.toString() + timeMonth.toString()  // 将年份和月份拼接 会自动进行循环  自动拼接el-date-picker选择器的时间 例:202101
	          /**
	          * 可以取区间值
	          * 也可以某年某月之前或者之后
	          * timeDate 选择器时间
	          * currentDate 当前年月份  202110
	          */
	          return currentDate < timeDate || currentDate > timeDate  //  将2021年10之前和2021年10月之后禁用  只可选取2021年10月  
	        }
	      },
      	}
      }
    }
</script>

案例二:

1.实现只选择年份

此时如果年份为2022

那么实际传到后端的时间是2021年的最后一天,显然是不对的,那么有什么办法得到正确的时间呢?答案是elementUI自带的日期转换format

<el-form-item label="查询年份:" label-width="82px">
          <el-date-picker
            style="width: 140px"
            v-model="formResult.year"
            type="year"
            placeholder="">
          </el-date-picker>
</el-form-item>

2.添加日期格式化

<el-form-item label="查询年份:" label-width="82px">
          <el-date-picker
            style="width: 140px"
            v-model="formResult.year"
            type="year"
            format="yyyy"(显示格式化)
            value-format="yyyy"(数据格式化)
            placeholder="">
          </el-date-picker>
</el-form-item>

当然,要获得完整的时间直接用yyyy-MM-dd

问题一:

SimpleDateFormat的parse()得到的日期不是正确日期?

一定要注意是否是定义的日期格式错误,特别注意大小写!!!
年 :y

月:M

日:d

时:H

分:m

秒:s
大小写写错会导致得到的日期不正确。

问题二:

能否直接从数据库查出date类型的时间(默认是sql类型的date)?

// sql转date 使用SQL自带函数
date_format(date, format) 函数,MySQL日期格式化函数date_format()

执行sql查询当前日期:

select now();

时间转字符串

select date_format(now(), '%Y-%m-%d');

通过生日计算年龄,以及根据数字返回男还是女

sql写法:

左连接查询经典案例。

<select id="findAllVip" resultType="java.util.HashMap">
        SELECT
        a.id,
        a.fileNumber,
        a.NAME name,
        YEAR (
        NOW())- LEFT ( a.birthday, 4 ) age,
        CASE
        ( a.sex )
        WHEN 1 THEN
        '男'
        WHEN 2 THEN
        '女'
        END
        AS 'sex',
        b.username health,
        a.phoneNumber,
        a.regTime
        FROM
        t_member a
        LEFT JOIN t_user b ON a.user_id = b.id
        <where>
            <if test="value!=null and value.length>0">
                a.fileNumber = #{value} or a.name = #{value} or a.phoneNumber = #{value}
            </if>
        </where>
    </select>

方式二:

在实现类里面操作

         for (Member member : memberList){
            if (member.getBirthday() != null) {
                int age = DateUtils.GetAge(member.getBirthday());
                member.setAge(age);
                }
          }
   public static int GetAge (Date date){
        Calendar calendar = Calendar.getInstance();
                Date nowTime = calendar.getTime();
                long difference =  (nowTime.getTime()-date.getTime())/86400000;
                int year = Math.toIntExact(difference / 365);
                if (difference%365 != 0){
                    year +=1;
                }
                return year;
    }

下文附上日期操作时间类,方便日后使用:



/**
 * 日期操作工具类
 */
public class DateUtils {
    /**
     * 日期转换-  String -> Date
     *
     * @param dateString 字符串时间
     * @return Date类型信息
     * @throws Exception 抛出异常
     */
    public static Date parseString2Date(String dateString) throws Exception {
        if (dateString == null) {
            return null;
        }
        return parseString2Date(dateString, "yyyy-MM-dd");
    }

    /**
     * 日期转换-  String -> Date
     *
     * @param dateString 字符串时间
     * @param pattern    格式模板
     * @return Date类型信息
     * @throws Exception 抛出异常
     */
    public static Date parseString2Date(String dateString, String pattern) throws Exception {
        if (dateString == null) {
            return null;
        }
        SimpleDateFormat sdf = new SimpleDateFormat(pattern);
        Date date = sdf.parse(dateString);
        return date;
    }

    /**
     * 日期转换 Date -> String
     *
     * @param date Date类型信息
     * @return 字符串时间
     * @throws Exception 抛出异常
     */
    public static String parseDate2String(Date date) throws Exception {
        if (date == null) {
            return null;
        }
        return parseDate2String(date, "yyyy-MM-dd");
    }

    /**
     * 日期转换 Date -> String
     *
     * @param date    Date类型信息
     * @param pattern 格式模板
     * @return 字符串时间
     * @throws Exception 抛出异常
     */
    public static String parseDate2String(Date date, String pattern) throws Exception {
        if (date == null) {
            return null;
        }
        SimpleDateFormat sdf = new SimpleDateFormat(pattern);
        String strDate = sdf.format(date);
        return strDate;
    }

    /**
     * 获取当前日期的本周一是几号
     *
     * @return 本周一的日期
     */
    public static Date getThisWeekMonday() {
        Calendar cal = Calendar.getInstance();
        cal.setTime(new Date());
        // 获得当前日期是一个星期的第几天
        int dayWeek = cal.get(Calendar.DAY_OF_WEEK);
        if (1 == dayWeek) {
            cal.add(Calendar.DAY_OF_MONTH, -1);
        }
        // 设置一个星期的第一天,按中国的习惯一个星期的第一天是星期一
        cal.setFirstDayOfWeek(Calendar.MONDAY);
        // 获得当前日期是一个星期的第几天
        int day = cal.get(Calendar.DAY_OF_WEEK);
        // 根据日历的规则,给当前日期减去星期几与一个星期第一天的差值
        cal.add(Calendar.DATE, cal.getFirstDayOfWeek() - day);
        return cal.getTime();
    }

    /**
     * 获取当前日期周的最后一天
     *
     * @return 当前日期周的最后一天
     */
    public static Date getSundayOfThisWeek() {
        Calendar c = Calendar.getInstance();
        int dayOfWeek = c.get(Calendar.DAY_OF_WEEK) - 1;
        if (dayOfWeek == 0) {
            dayOfWeek = 7;
        }
        c.add(Calendar.DATE, -dayOfWeek + 7);
        return c.getTime();
    }

    /**
     * 根据日期区间获取月份列表
     *
     * @param minDate 开始时间
     * @param maxDate 结束时间
     * @return 月份列表
     * @throws Exception
     */
    public static List<String> getMonthBetween(String minDate, String maxDate, String format) throws Exception {
        ArrayList<String> result = new ArrayList<>();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");

        Calendar min = Calendar.getInstance();
        Calendar max = Calendar.getInstance();

        min.setTime(sdf.parse(minDate));
        min.set(min.get(Calendar.YEAR), min.get(Calendar.MONTH), 1);

        max.setTime(sdf.parse(maxDate));
        max.set(max.get(Calendar.YEAR), max.get(Calendar.MONTH), 2);
        SimpleDateFormat sdf2 = new SimpleDateFormat(format);

        Calendar curr = min;
        while (curr.before(max)) {
            result.add(sdf2.format(curr.getTime()));
            curr.add(Calendar.MONTH, 1);
        }

        return result;
    }

    /**
     * 根据日期获取年度中的周索引
     *
     * @param date 日期
     * @return 周索引
     * @throws Exception
     */
    public static Integer getWeekOfYear(String date) throws Exception {
        Date useDate = parseString2Date(date);
        Calendar cal = Calendar.getInstance();
        cal.setTime(useDate);
        return cal.get(Calendar.WEEK_OF_YEAR);
    }

    /**
     * 根据年份获取年中周列表
     *
     * @param year 年分
     * @return 周列表
     * @throws Exception
     */
    public static Map<Integer, String> getWeeksOfYear(String year) throws Exception {
        Date useDate = parseString2Date(year, "yyyy");
        Calendar cal = Calendar.getInstance();
        cal.setTime(useDate);
        //获取年中周数量
        int weeksCount = cal.getWeeksInWeekYear();
        Map<Integer, String> mapWeeks = new HashMap<>(55);
        for (int i = 0; i < weeksCount; i++) {
            cal.get(Calendar.DAY_OF_YEAR);
            mapWeeks.put(i + 1, parseDate2String(getFirstDayOfWeek(cal.get(Calendar.YEAR), i)));
        }
        return mapWeeks;
    }

    /**
     * 获取某年的第几周的开始日期
     *
     * @param year 年分
     * @param week 周索引
     * @return 开始日期
     * @throws Exception
     */
    public static Date getFirstDayOfWeek(int year, int week) throws Exception {
        Calendar c = new GregorianCalendar();
        c.set(Calendar.YEAR, year);
        c.set(Calendar.MONTH, Calendar.JANUARY);
        c.set(Calendar.DATE, 1);

        Calendar cal = (GregorianCalendar) c.clone();
        cal.add(Calendar.DATE, week * 7);

        return getFirstDayOfWeek(cal.getTime());
    }

    /**
     * 获取某年的第几周的结束日期
     *
     * @param year 年份
     * @param week 周索引
     * @return 结束日期
     * @throws Exception
     */
    public static Date getLastDayOfWeek(int year, int week) throws Exception {
        Calendar c = new GregorianCalendar();
        c.set(Calendar.YEAR, year);
        c.set(Calendar.MONTH, Calendar.JANUARY);
        c.set(Calendar.DATE, 1);

        Calendar cal = (GregorianCalendar) c.clone();
        cal.add(Calendar.DATE, week * 7);

        return getLastDayOfWeek(cal.getTime());
    }

    /**
     * 获取当前时间所在周的开始日期
     *
     * @param date 当前时间
     * @return 开始时间
     */
    public static Date getFirstDayOfWeek(Date date) {
        Calendar c = new GregorianCalendar();
        c.setFirstDayOfWeek(Calendar.SUNDAY);
        c.setTime(date);
        c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek());
        return c.getTime();
    }

    /**
     * 获取当前时间所在周的结束日期
     *
     * @param date 当前时间
     * @return 结束日期
     */
    public static Date getLastDayOfWeek(Date date) {
        Calendar c = new GregorianCalendar();
        c.setFirstDayOfWeek(Calendar.SUNDAY);
        c.setTime(date);
        c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek() + 6);
        return c.getTime();
    }
    //获得上周一的日期
    public static Date geLastWeekMonday(Date date) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(getThisWeekMonday(date));
        cal.add(Calendar.DATE, -7);
        return cal.getTime();
    }

    //获得本周一的日期
    public static Date getThisWeekMonday(Date date) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        // 获得当前日期是一个星期的第几天
        int dayWeek = cal.get(Calendar.DAY_OF_WEEK);
        if (1 == dayWeek) {
            cal.add(Calendar.DAY_OF_MONTH, -1);
        }
        // 设置一个星期的第一天,按中国的习惯一个星期的第一天是星期一
        cal.setFirstDayOfWeek(Calendar.MONDAY);
        // 获得当前日期是一个星期的第几天
        int day = cal.get(Calendar.DAY_OF_WEEK);
        // 根据日历的规则,给当前日期减去星期几与一个星期第一天的差值
        cal.add(Calendar.DATE, cal.getFirstDayOfWeek() - day);
        return cal.getTime();
    }

    //获得下周一的日期
    public static Date getNextWeekMonday(Date date) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(getThisWeekMonday(date));
        cal.add(Calendar.DATE, 7);
        return cal.getTime();
    }

    //获得今天日期
    public static Date getToday(){
        return new Date();
    }

    //获得本月一日的日期
    public static Date getFirstDay4ThisMonth(){
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.DAY_OF_MONTH,1);
        return calendar.getTime();
    }

    public static void main(String[] args) {
        try {
            System.out.println("本周一" + parseDate2String(getThisWeekMonday()));
            System.out.println("本月一日" + parseDate2String(getFirstDay4ThisMonth()));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static int getDayOfMonth(){
        Calendar aCalendar = Calendar.getInstance(Locale.CHINA);
        int day=aCalendar.getActualMaximum(Calendar.DATE);
        return day;
    }

    public static  Date getLastDayThisMonth(int year,int month){
        int y,m;
        if(month == 12){
            y = year++;
            m = 1;
        }else{
            y = year;
            m = month++;
        }

        Calendar calendar = Calendar.getInstance();
        calendar.set(y,m,1);
        calendar.add(Calendar.DAY_OF_MONTH,-1);
        return calendar.getTime();
    }
    /*public static Date getLastDayOfMounth(Date date){
        date.
        Calendar
    }*/

    public static int GetAge (Date date){
        Calendar calendar = Calendar.getInstance();
                Date nowTime = calendar.getTime();
                long difference =  (nowTime.getTime()-date.getTime())/86400000;
                int year = Math.toIntExact(difference / 365);
                if (difference%365 != 0){
                    year +=1;
                }
                return year;
    }
}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值