时间回显+选择(年月日时分秒

news/2024/7/9 23:48:29 标签: vue, elementui, java

一、获取某个时间

1、Date获取Date类型

<el-form-item label="时间" name="endTime">
  <el-date-picker type="datetime" v-model="editForm.endTime"></el-date-picker>
</el-form-item>

效果如图:

报错(后端是 Date 类型(java.util.Date)):

org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize value of type `java.util.Date` from String "2023-11-30T16:00:00.000Z": not a valid representation (error: Failed to parse Date value '2023-11-30T16:00:00.000Z': Unparseable date: "2023-11-30T16:00:00.000Z"); nested exception is com.fasterxml.jackson.databind.exc.InvalidFormatException: Cannot deserialize value of type `java.util.Date` from String "2023-11-30T16:00:00.000Z": not a valid representation (error: Failed to parse Date value '2023-11-30T16:00:00.000Z': Unparseable date: "2023-11-30T16:00:00.000Z")

解决方法:

在接收时间参数(即endTime)的参数上增加中注解:

java">@JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", timezone = "UTC")

这个注解告诉 Jackson 库如何解析和格式化日期字段。在这个例子中,它告诉 Jackson 使用指定的格式 "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'" 和时区 "UTC" 来处理日期。

完整代码如下:

java">import com.fasterxml.jackson.annotation.JsonFormat;

@Setter
@Getter
public class EditParam {
    @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", timezone = "UTC")
    private Date endTime;
}

2、Date获取String类型

<el-form-item label="时间" name="endTime">
  <el-date-picker type="datetime" value-format="YYYY:MM:DD HH:mm:ss" v-model="editForm.endTime"></el-date-picker>
</el-form-item>

与第一条的区别是加上了:value-format="YYYY:MM:DD HH:mm:ss"

效果同上,报另一个错误(后端是 Date 类型(java.util.Date)):

org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize value of type `java.util.Date` from String "2023:12:02 00:00:00": not a valid representation (error: Failed to parse Date value '2023:12:02 00:00:00': Unparseable date: "2023:12:02 00:00:00"); nested exception is com.fasterxml.jackson.databind.exc.InvalidFormatException: Cannot deserialize value of type `java.util.Date` from String "2023:12:02 00:00:00": not a valid representation (error: Failed to parse Date value '2023:12:02 00:00:00': Unparseable date: "2023:12:02 00:00:00")

解决方法:

在接收时间参数(即endTime)的参数上增加中注解:

java">@JsonFormat(pattern = "yyyy:MM:dd HH:mm:ss", timezone = "UTC")

这个注解告诉 Jackson 按照指定的模式解析和序列化日期字段。

完整代码如下:

java">import com.fasterxml.jackson.annotation.JsonFormat;

@Setter
@Getter
public class EditParam {
    @JsonFormat(pattern = "yyyy:MM:dd HH:mm:ss", timezone = "UTC")
    private Date endTime;
}

注意,默认是Date类型,不是字符串类型(如上显示),如果需要回显数据库中的则会是字符串形式,需要 value-format,如果不需要则可以默认,因为如果数据库中回显不做任何操作保存数据类型将是字符串,但是默认Date,所以需要用第二种方式。

BUG

Vue前端的时间是 2023-12-18 12:59:51,但是后端通过@JsonFormat(pattern = "YYYY-MM-dd HH:mm:ss", timezone = "UTC")获取到的时间却是Sun Jan 01 20:59:51 CST 2023

解决:可能涉及到时区处理,将 

java">@JsonFormat(pattern = "YYYY-MM-dd HH:mm:ss", timezone = "UTC")

改为:

java">@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")

不能是如下,因为会有年月日错误:

java">@JsonFormat(pattern = "YYYY-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")

二、获取时间范围

1、String类型获取String类型

        <el-date-picker
                v-model="searchFormState.createTime"
                value-format="YYYY-MM-DD HH:mm:ss"
                type="daterange"
                range-separator="至"
                start-placeholder="开始时间"
                end-placeholder="结束时间"/>
          </el-form-item>

效果如下图:

javascript">      const searchFormParam = JSON.parse(JSON.stringify(this.searchFormState))
      // createTime范围查询条件重载
      if (searchFormParam.createTime) {
        searchFormParam.startTime = searchFormParam.createTime[0]
        searchFormParam.endTime = searchFormParam.createTime[1]
        delete searchFormParam.createTime
      }
      // 后端获取对象实体类
      xxxApi.page(Object.assign(searchFormParam)).then((data) => {}
java">    private String startTime;
    private String endTime;
java">mybatisplus的使用查询范围直接:wrapper.between("CREATE_TIME", param.getStartTime(), param.getEndTime());即可

或者使用 a-range-picker、a-range-picker:

<a-range-picker v-model:value="searchFormState.createTime" value-format="YYYY-MM-DD HH:mm:ss" show-time />
<a-range-picker v-model:value="searchFormState.createTime" show-time />

<a-date-picker v-model:value="formData.birthday" value-format="YYYY-MM-DD" style="width: 100%" />

效果图如下:

2、Date类型获取String类型

    <el-date-picker
        v-model="searchFormState.createTime"
        type="daterange"
        range-separator="至"
        start-placeholder="开始时间"
        end-placeholder="结束时间" />
    </el-form-item>
javascript">// createTime范围查询条件重载
if (this.searchFormState.createTime) {
  this.searchFormState.startTime = this.searchFormState.createTime[0]
  this.searchFormState.endTime = this.searchFormState.createTime[1]
}
xxxApi.getUsers(this.searchFormState).then((data) => {}
java">import com.fasterxml.jackson.annotation.JsonFormat;

    @ApiModelProperty("开始时间")
    @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", timezone = "UTC")
    private Date startTime;

    @ApiModelProperty("结束时间")
    @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", timezone = "UTC")
    private Date endTime;

el-date-picker 的范围 type="daterange" 选择如下图,没有时分秒选择,默认00:00:00

el-date-picker 的时间 type="datetime" 选择如下图,可选择年月日时分秒:

a-range-picker 的范围选择如下图,可选择年月日时分秒:

a-date-picker 的时间选择如下图,不可选择年月日时分秒:


http://www.niftyadmin.cn/n/5362163.html

相关文章

Python学习之路-Tornado基础:HelloTornado

Python学习之路-Tornado基础:HelloTornado 前言 回想Django的部署方式 以Django为代表的python web应用部署时采用wsgi协议与服务器对接&#xff08;被服务器托管&#xff09;&#xff0c;而这类服务器通常都是基于多线程的&#xff0c;也就是说每一个网络请求服务器都会有一…

杭州某会计事务小公司面经

杭州某会计事务小公司面经 1&#xff09;自我介绍 2&#xff09;开源项目功能点介绍 3&#xff09;向量型数据库了解吗 4&#xff09;SpringCloud 微服务了解多少 5&#xff09;单体事务是如何保证的&#xff0c;介绍一下 6&#xff09;RBAC 角色权限是怎么控制的&#x…

【PDF.js】发票PDF不显示文本的问题

控制台提示警告&#xff1a; Warning: loadFont - translateFont failed: "UnknownErrorException: The CMap "baseUrl" parameter must be specified, ensure that the "cMapUrl" and "cMapPacked" API parameters are provided.".…

WordPress可以做企业官网吗?如何用wordpress建公司网站?

我们在国内看到很多个人博客网站都是使用WordPress搭建&#xff0c;但是企业官网的相对少一些&#xff0c;那么WordPress可以做企业官网吗&#xff1f;如何用wordpress建公司网站呢&#xff1f;下面boke112百科就跟大家简单说一下。 WordPress是一款免费开源的内容管理系统&am…

分享一个WPF项目

最近在学习WPF开发方式&#xff0c;找到一些项目进行拆解学习&#xff1b;本位主要分享一个WPF项目&#xff0c;叫做WPFDevelopers&#xff0c;在git上大约有1.3K星&#xff0c;话不多说&#xff0c;先看看效果&#xff1a; 这个项目开发可以编译启动后直接查看样例、Xaml、Cha…

代码随想录训练营第三十期|第二十五天|216.组合总和III● 17.电话号码的字母组合

216. 组合总和 III - 力扣&#xff08;LeetCode&#xff09; class Solution {public List<List<Integer>> combinationSum3(int k, int n) {List<List<Integer>> res new ArrayList<>();List<Integer> list new ArrayList<>();d…

Django的web框架Django Rest_Framework精讲(二)

文章目录 1.自定义校验功能&#xff08;1&#xff09;validators&#xff08;2&#xff09;局部钩子&#xff1a;单字段校验&#xff08;3&#xff09;全局钩子&#xff1a;多字段校验 2.raise_exception 参数3.context参数4.反序列化校验后保存&#xff0c;新增和更新数据&…

华为数通方向HCIP-DataCom H12-821题库(单选题:401-420)

第401题 R1的配置如图所示,此时在R1查看FIB表时,关于目的网段192.168.1.0/24的下跳是以下哪一项? A、10.0.23.3 B、10.0.12.2 C、10.0.23.2 D、10.0.12.1 【答案】A 【答案解析】 该题目考查的是路由的递归查询和 RIB 以及 FIB 的关系。在 RIB 中,静态路由写的是什么,下…