SpringMVC(3)-日期处理

95 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

目录

一.日期提交处理

0.日期的格式化

1.单个日期注入

2.全局日期处理

二.日期的显示处理

1.准备步骤

2.日期显示 

3.日期对象在自定义对象中

4.JSON中的日期显示


一.日期提交处理

0.日期的格式化

public class testDate {
    public static void main(String[] args) {
        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
        Date date = new Date();
        System.out.println(sf.format(date));
    }
}

格式化之前:Wed May 11 14:57:45 CST 2022

格式化之后:2022/5/11 下午2:58

1.单个日期注入

注意:要搭配使用注解驱动

<mvc:annotation-driven></mvc:annotation-driven>

<form action="${pageContext.request.contextPath}/date">
  <input type="date" name="mydate">
  <input type="submit" value="提交">
</form>

@Controller
public class Date {
    @RequestMapping("date")
    public String date(@DateTimeFormat(pattern = "yyyy-MM-dd") java.util.Date mydate){
        System.out.println(mydate);
        return "main";
    }
}

注解是将String类型的日期注入给mydate,在形参中,每个Date类型的数据之前都必须有@DateTimeFormat(pattern = "yyyy-MM-dd"),这种方式处理时,当日期参数多了之后会变得很麻烦,所以下面有全局日期处理。

2.全局日期处理

类中全局日期处理,全局是指在一个类中

 sf为刷子,true表示允许为空

加了这个注解和方法就不需要注解驱动了

二.日期的显示处理

从数据库中拿到日期,把日期显示在界面上,要使用JSTL。

1.准备步骤

Step1:添加JSTL依赖

<!--      JSTL依赖-->
      <dependency>
          <groupId>jstl</groupId>
          <artifactId>jstl</artifactId>
          <version>1.2</version>
      </dependency>

Step2:在jsp页面导入标签库

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

2.日期显示

显示单个日期

(1)直接将日期对象返回到页面,然后将日期对象改变格式

request.setAttribute("mydate",sf.format(mydate));

${mydate}<br>

​编辑

日期的格式取决于格式刷的格式

(2)将日期对象在后端更改格式再传到前端,但sf.format(mydate)之后,日期类型就变成了字符串了。

request.setAttribute("mydate2",mydate2);

<fmt:formatDate value="${mydate2}" pattern="yyyy-MM-dd"></fmt:formatDate>

​编辑

显示日期集合

(1)将每个日期对象都格式化,然后装到List集合中

@Controller
public class Date {
    SimpleDateFormat sf = new SimpleDateFormat();

    @RequestMapping("/date")
    public String date(@DateTimeFormat(pattern = "yyyy-MM-dd") java.util.Date mydate,
                       @DateTimeFormat(pattern = "yyyy-MM-dd") java.util.Date mydate2,
                       HttpServletRequest request){
        System.out.println(sf.format(mydate));
        System.out.println(sf.format(mydate2));
        List<String> list = new ArrayList<>();
        list.add(sf.format(mydate));
        list.add(sf.format(mydate2));
        request.setAttribute("list",list);
}

<body>
${list}<br>
${list.get(0)}<br>
${list.get(1)}
</body>

​编辑

(2)将日期对象装到List集合中,在页面利用jstl将日期对象进行格式化

@Controller
public class Date {
    SimpleDateFormat sf = new SimpleDateFormat();

    @RequestMapping("/date")
    public String date(@DateTimeFormat(pattern = "yyyy-MM-dd") java.util.Date mydate,
                       @DateTimeFormat(pattern = "yyyy-MM-dd") java.util.Date mydate2,
                       HttpServletRequest request){
        System.out.println(sf.format(mydate));
        System.out.println(sf.format(mydate2));
        List<java.util.Date> list = new ArrayList<>();
        list.add(mydate);
        list.add(mydate2);
        request.setAttribute("list",list);
}

<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<fmt:formatDate value="${list.get(0)}" pattern="yyyy-MM-dd"></fmt:formatDate><br>
<fmt:formatDate value="${list.get(1)}" pattern="yyyy-MM-dd"></fmt:formatDate>
</body>
</html>

​编辑

 3.日期对象在自定义对象中

注意:

要在自定义对象的属性或者set方法上添加注解@DateTimeFormat(pattern = "yyyy-MM-dd")

public class Student {
    private String name;
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date birthday;

    public Student() {
    }

    public Student(String name, Date birthday) {
        this.name = name;
        this.birthday = birthday;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + ''' +
                ", birthday=" + birthday +
                '}';
    }
}

<body>
<form action="${pageContext.request.contextPath}/date">
  <input type="text" name="name">
  <input type="date" name="birthday">
  <input type="submit" value="提交">
</form>
</body>

@Controller
public class Date {
    SimpleDateFormat sf = new SimpleDateFormat();

    @RequestMapping("/date")
    public String date(Student student, HttpServletRequest request){
        request.setAttribute("student",student);
        return "main";
    }
}

<body>
${student.name}<br>
<fmt:formatDate value="${student.birthday}" pattern="yyyy-MM-dd"></fmt:formatDate><br>
</body>

​编辑

4.JSON中的日期显示

需要在类中的日期成员变量的get方法上添加注解@JsonFormat(pattern = ""yyyy-MM-dd HH:mm:ss)

返回JSON格式的时候,要将方法添加注解@ResponseBody,然后返回对象或者集合,SpringMVC将对象或集合转为JSON格式,当遇到对象的属性是Date类型时,为了让日期显示的美观往往需要转格式,这时候需要在对象的日期get方法上添加注解@JsonFormat(pattern = ""yyyy-MM-dd HH:mm:ss)

\